diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 39c5db8605fcc20f378f9b5acc619263e3478871..5d86b9b2b9c4988816841c2afafe60adaefe9393 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,6 +1,8 @@
 plugins {
     id("com.android.application")
     id("org.jetbrains.kotlin.android")
+    id("kotlin-parcelize")
+    id("kotlin-kapt")
 }
 
 android {
@@ -17,9 +19,11 @@ android {
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
     }
 
+//
+
     buildTypes {
         release {
-            isMinifyEnabled = false
+            isMinifyEnabled = true
             proguardFiles(
                 getDefaultProguardFile("proguard-android-optimize.txt"),
                 "proguard-rules.pro"
@@ -33,6 +37,9 @@ android {
     kotlinOptions {
         jvmTarget = "1.8"
     }
+    buildFeatures {
+        viewBinding = true
+    }
 }
 
 dependencies {
@@ -41,7 +48,28 @@ dependencies {
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation("com.google.android.material:material:1.11.0")
     implementation("androidx.constraintlayout:constraintlayout:2.1.4")
+    implementation("androidx.annotation:annotation:1.7.1")
+    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0")
+    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
+    implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
+    implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
+    implementation("com.squareup.retrofit2:retrofit:2.9.0")
+    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.5")
     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+    implementation("androidx.room:room-ktx:2.5.0")
+    kapt("androidx.room:room-compiler:2.5.0")
+    androidTestImplementation ("androidx.room:room-testing:2.5.0")
+    implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
+    implementation ("org.apache.poi:poi:5.2.4")
+    implementation ("org.apache.poi:poi-ooxml:5.2.4")
+    implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")
+    implementation ("com.squareup.okhttp3:okhttp:4.9.1")
+
+    implementation ("androidx.camera:camera-core:1.2.2")
+    implementation ("androidx.camera:camera-camera2:1.2.2")
+    implementation ("androidx.camera:camera-lifecycle:1.2.2")
+    implementation ("androidx.camera:camera-view:1.2.2")
+    implementation ("com.google.android.gms:play-services-location:18.0.0")
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ba19ba10127492669fc8817b6fa3d14341c0e90d..cb0763c332a05756857459de3655c726e81ec2ea 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,24 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
 
+    <uses-feature
+        android:name="android.hardware.camera"
+        android:required="false" />
+
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
+        android:maxSdkVersion="32" />
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+
+
+
     <application
         android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
@@ -12,15 +30,38 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.AndroidHIT"
         tools:targetApi="31">
+        <activity
+            android:name=".LoginActivity"
+            android:exported="false" />
+        <activity
+            android:name=".DetailTransactionActivity"
+            android:exported="false" />
         <activity
             android:name=".MainActivity"
-            android:exported="true">
+            android:exported="false" />
+
+        <activity
+            android:name=".BondoManSplashScreen"
+            android:exported="true"
+            android:theme="@style/Theme.Design.Light.NoActionBar">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <service android:name=".CheckJWTBackground"/>
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="com.example.android_hit.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+
     </application>
 
+
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/BondoManSplashScreen.kt b/app/src/main/java/com/example/android_hit/BondoManSplashScreen.kt
new file mode 100644
index 0000000000000000000000000000000000000000..be9bcb1818d35f24e99c57e12293d2150348e2c1
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/BondoManSplashScreen.kt
@@ -0,0 +1,22 @@
+package com.example.android_hit
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import java.util.Timer
+import java.util.TimerTask
+
+class BondoManSplashScreen : AppCompatActivity() {
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_bondo_man_splash_screen)
+
+        Timer().schedule(object : TimerTask() {
+            override fun run() {
+                startActivity(Intent(this@BondoManSplashScreen, LoginActivity::class.java))
+                finish()
+            }
+        }, 3000)
+
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/CheckJWTBackground.kt b/app/src/main/java/com/example/android_hit/CheckJWTBackground.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5cb54e18dcd497b92718812c51c0823c26650fc7
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/CheckJWTBackground.kt
@@ -0,0 +1,71 @@
+package com.example.android_hit
+
+import android.app.Service
+import android.content.Intent
+import android.os.Handler
+import android.os.IBinder
+import android.util.Log
+import com.example.android_hit.utils.TokenManager
+import kotlin.concurrent.thread
+
+class CheckJWTBackground:Service() {
+    private lateinit var sharedPref : TokenManager
+    private lateinit var handler: Handler
+    private var stop = false
+    override fun onBind(intent: Intent?): IBinder? {
+        return null
+    }
+
+    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+        sharedPref = TokenManager(this)
+        handler = Handler()
+        thread {
+            while (true) {
+                try {
+                    Thread.sleep(2000)
+                    // Perform your task here
+                    val exp = sharedPref.getEXP("EXP_TIME")
+                    val currentTime = System.currentTimeMillis()/1000
+                    Log.d("THREAD", exp.toString())
+                    Log.d("THREAD", currentTime.toString())
+                    Log.e("THREAD", (exp-currentTime).toString())
+                    if(currentTime>exp && !stop){
+                        handler.post {
+                            showConfirmationBox()
+                        }
+                        sharedPref.deleteToken()
+                        stopSelf()
+                        return@thread
+                    }
+                    if(stop){
+                        return@thread
+                    }
+
+
+
+                } catch (e: InterruptedException) {
+                    return@thread
+                }
+            }
+        }
+        return START_STICKY
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        stop = true
+        stopSelf()
+    }
+
+    private fun showConfirmationBox() {
+        val intent = Intent(applicationContext, MainActivity::class.java)
+        intent.putExtra("show_confirmation", true)
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        startActivity(intent)
+    }
+
+    override fun onTaskRemoved(rootIntent: Intent?) {
+        super.onTaskRemoved(rootIntent)
+        stopSelf()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/DetailTransaction.kt b/app/src/main/java/com/example/android_hit/DetailTransaction.kt
new file mode 100644
index 0000000000000000000000000000000000000000..dfefc31f4d864fc79dd8201a594c83947ec6e600
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/DetailTransaction.kt
@@ -0,0 +1,337 @@
+package com.example.android_hit
+
+import android.Manifest
+import android.app.Activity
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.IntentSender
+import android.content.pm.PackageManager
+import android.location.Geocoder
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import com.google.android.gms.location.LocationRequest
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.Fragment
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.example.android_hit.databinding.FragmentDetailTransactionBinding
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.google.android.gms.common.api.ApiException
+import com.google.android.gms.common.api.ResolvableApiException
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
+import com.google.android.gms.location.LocationSettingsRequest
+import com.google.android.gms.location.LocationSettingsStatusCodes
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+
+class DetailTransaction : Fragment(), LocationListener {
+    private var _binding: FragmentDetailTransactionBinding? = null
+    private val binding get() = _binding!!
+    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
+    private lateinit var database: TransactionDB
+    private var category: String = ""
+    private var coordinate: String = "-6.927314530264154, 107.77007155415649"
+    private var location: String = ""
+    private lateinit var transactionReceiver: TransactionReceiver
+    private val RANDOMIZE_ACTION = "com.example.android_hit.RANDOMIZE_ACTION"
+    private lateinit var locationManager: LocationManager
+    private lateinit var locationRequest: LocationRequest
+
+
+    companion object {
+        var fragmentCounter = 0
+        var amountInput = ""
+    }
+
+    inner class TransactionReceiver : BroadcastReceiver() {
+        override fun onReceive(context: Context?, intent: Intent?) {
+            if (intent?.action == RANDOMIZE_ACTION) {
+                // Handle the broadcast message here
+                val data = intent.getStringExtra("hargaRandom")
+                Log.e("BROD", "Received randomize broadcast message $data")
+                if (data != null) {
+                    amountInput = data
+                }
+            }
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        fragmentCounter++
+        _binding = FragmentDetailTransactionBinding.inflate(inflater, container, false)
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        database = TransactionDB.getInstance(requireContext())
+
+        transactionReceiver = TransactionReceiver()
+        val filter = IntentFilter(RANDOMIZE_ACTION)
+        LocalBroadcastManager.getInstance(requireContext()).registerReceiver(transactionReceiver, filter)
+
+        locationManager = requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
+        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext())
+        binding.inputLocation.setOnClickListener {
+            Log.d("Location", "Input location clicked")
+            checkLocationPermission()
+        }
+
+
+        binding.radioExpense.setOnCheckedChangeListener { _, isChecked ->
+            if (isChecked) {
+                category = "Expense"
+                binding.radioExpense.setTextColor(ContextCompat.getColor(requireContext(), R.color.secondary4))
+            } else {
+                binding.radioExpense.setTextColor(
+                    ContextCompat.getColor(
+                        requireContext(),
+                        R.color.primary_color_1
+                    )
+                )
+            }
+        }
+
+        binding.radioIncome.setOnCheckedChangeListener { _, isChecked ->
+            if (isChecked) {
+                category = "Income"
+                binding.radioIncome.setTextColor(ContextCompat.getColor(requireContext(), R.color.secondary5))
+            } else {
+                binding.radioIncome.setTextColor(
+                    ContextCompat.getColor(
+                        requireContext(),
+                        R.color.primary_color_1
+                    )
+                )
+            }
+        }
+
+        if(amountInput!=""){
+            binding.inputAmount.setText(amountInput)
+        }
+        val intent = requireActivity().intent.extras
+        if (intent != null) {
+            val id = intent.getInt("id", 0)
+            val transaction = database.transactionDao.getId(id)
+
+            binding.radioExpense.isEnabled = false
+            binding.radioIncome.isEnabled = false
+
+            binding.inputTitle.setText(transaction.title)
+            binding.inputAmount.setText(transaction.amount.toString())
+            if (transaction.category == "Expense") {
+                binding.radioExpense.isChecked = true
+            } else if (transaction.category == "Income") {
+                binding.radioIncome.isChecked = true
+            }
+            binding.inputLocation.setText(transaction.location)
+        }
+
+        binding.buttonSave.setOnClickListener {
+            val title = binding.inputTitle.text.toString()
+            val amount = binding.inputAmount.text.toString()
+            location = binding.inputLocation.text.toString()
+            Log.d("koordinat", "Coordinate: $coordinate")
+            Log.d("lokasi", "Location: $location")
+
+            if (title.isNotEmpty() && amount.isNotEmpty() && location.isNotEmpty() && (binding.radioExpense.isChecked || binding.radioIncome.isChecked)) {
+                try {
+                    var timestamp: String? = null
+
+                    if (intent != null) {
+                        val id = intent.getInt("id", 0)
+
+                        val transaction = database.transactionDao.getId(id)
+                        timestamp = transaction.timestamp
+
+                        database.transactionDao.updateTransaction(
+                            TransactionEntity(
+                                intent.getInt("id", 0),
+                                title,
+                                amount.toInt(),
+                                category,
+                                location,
+                                coordinate,
+                                timestamp.toString()
+                            )
+                        )
+                        requireActivity().setResult(Activity.RESULT_OK)
+                    } else {
+                        val amountValue = amount.toInt()
+
+                        val timestamp = System.currentTimeMillis()
+                        val sdf = SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault())
+                        val currentDateAndTime: String = sdf.format(Date(timestamp))
+
+                        database.transactionDao.addTransaction(
+                            TransactionEntity(
+                                null,
+                                title,
+                                amountValue,
+                                category,
+                                location,
+                                coordinate,
+                                currentDateAndTime
+                            )
+                        )
+                    }
+
+                    Toast.makeText(
+                        requireContext(),
+                        "Transaction saved",
+                        Toast.LENGTH_SHORT
+                    ).show()
+
+                    val intent = Intent(requireContext(), MainActivity::class.java)
+                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
+                    startActivity(intent)
+
+                } catch (e: NumberFormatException) {
+                    Toast.makeText(
+                        requireContext(),
+                        "Invalid amount entered",
+                        Toast.LENGTH_SHORT
+                    ).show()
+                } catch (ex: Exception) {
+                    Toast.makeText(
+                        requireContext(),
+                        "Error occurred: ${ex.message}",
+                        Toast.LENGTH_SHORT
+                    ).show()
+                }
+            } else {
+                Toast.makeText(
+                    requireContext(),
+                    "Please fill all the fields",
+                    Toast.LENGTH_SHORT
+                ).show()
+            }
+        }
+    }
+
+    private fun checkLocationPermission() {
+        if(ActivityCompat.checkSelfPermission(
+                requireContext(),
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ) == PackageManager.PERMISSION_GRANTED
+        ) {
+            Log.d("Location", "Permission granted")
+            checkGPS()
+        } else {
+            Log.d("Location", "Requesting location permission")
+            ActivityCompat.requestPermissions(
+                requireActivity(),
+                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
+                44
+            )
+        }
+    }
+
+    private fun getUserLocation() {
+        if (ActivityCompat.checkSelfPermission(
+                requireContext(),
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
+                requireContext(),
+                Manifest.permission.ACCESS_COARSE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            // TODO: Consider calling
+            //    ActivityCompat#requestPermissions
+            // here to request the missing permissions, and then overriding
+            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
+            //                                          int[] grantResults)
+            // to handle the case where the user grants the permission. See the documentation
+            // for ActivityCompat#requestPermissions for more details.
+            return
+        }
+        fusedLocationProviderClient.lastLocation.addOnSuccessListener { task ->
+
+            val location = task
+
+            if (location != null) {
+                try {
+                    val geocoder = Geocoder(requireContext(), Locale.getDefault())
+                    val address = geocoder.getFromLocation(location.latitude, location.longitude, 1)
+                    val addressLine = address?.get(0)?.getAddressLine(0)
+
+                    coordinate = "${location.latitude},${location.longitude}"
+                    binding.inputLocation.setText(addressLine)
+
+                    Log.d("Location", "Address: $addressLine")
+                    Log.d("Location", "Coordinate: $coordinate")
+
+                } catch (e: Exception) {
+                    e.printStackTrace()
+
+                }
+            }
+        }
+
+    }
+
+    private fun checkGPS() {
+        locationRequest = LocationRequest.create()
+        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
+        locationRequest.interval = 10000
+        locationRequest.fastestInterval = 5000
+
+        val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
+        builder.setAlwaysShow(true)
+        val result = LocationServices.getSettingsClient(requireContext().applicationContext).checkLocationSettings(builder.build())
+        result.addOnCompleteListener { task ->
+            try {
+                var response = task.getResult(
+                    ApiException::class.java
+                )
+                getUserLocation()
+            } catch (ex: ApiException) {
+                when (ex.statusCode) {
+                    LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {
+                        try {
+                            val resolvableApiException = ex as ResolvableApiException
+                            resolvableApiException.startResolutionForResult(
+                                this@DetailTransaction.requireActivity(),
+                                200
+                            )
+                        } catch (_: IntentSender.SendIntentException) {
+                        }
+                    }
+                    LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {
+                        Unit
+                    }
+                    else -> {}
+                }
+            }
+        }
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+        amountInput=""
+        if(fragmentCounter>1){
+            LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(transactionReceiver)
+        }
+    }
+
+    override fun onLocationChanged(location: Location) {
+        TODO("Not yet implemented")
+    }
+}
diff --git a/app/src/main/java/com/example/android_hit/DetailTransactionActivity.kt b/app/src/main/java/com/example/android_hit/DetailTransactionActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..69c9b01de29d0ca91db0bdfa12f5abf966b75b3e
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/DetailTransactionActivity.kt
@@ -0,0 +1,25 @@
+package com.example.android_hit
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import com.example.android_hit.databinding.ActivityDetailTransactionBinding
+
+class DetailTransactionActivity : AppCompatActivity() {
+    private lateinit var binding: ActivityDetailTransactionBinding
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        binding = ActivityDetailTransactionBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        setCurrentFragment(DetailTransaction(), HeaderDetailTransaction())
+    }
+
+    private fun setCurrentFragment(fragment: Fragment, header: Fragment) =
+        supportFragmentManager.beginTransaction().apply {
+            replace(R.id.frame_layout, fragment)
+            replace(R.id.header_layout, header)
+            commit()
+        }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/FragmentTwibbon.kt b/app/src/main/java/com/example/android_hit/FragmentTwibbon.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e9ef312d09be3df64e12ac5720c756913bcc63c9
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/FragmentTwibbon.kt
@@ -0,0 +1,156 @@
+package com.example.android_hit
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.res.Configuration
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.graphics.ImageFormat
+import android.graphics.Matrix
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.Surface
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.camera.core.CameraSelector
+import androidx.camera.core.ExperimentalGetImage
+import androidx.camera.core.ImageCapture
+import androidx.camera.core.ImageCaptureException
+import androidx.camera.core.ImageProxy
+import androidx.camera.core.Preview
+import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.LifecycleOwner
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.example.android_hit.databinding.FragmentTwibbonBinding
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.google.common.util.concurrent.ListenableFuture
+import java.nio.ByteBuffer
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class FragmentTwibbon : Fragment() {
+    private var _binding: FragmentTwibbonBinding? = null
+    private val binding get() = _binding!!
+    private lateinit var cameraProvider: ProcessCameraProvider
+    private lateinit var imageCapture: ImageCapture
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        _binding = FragmentTwibbonBinding.inflate(inflater, container, false)
+        return binding.root
+    }
+
+
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        setupCamera()
+
+        binding.capture.setOnClickListener {
+            captureImage()
+        }
+
+        binding.retakeButton.setOnClickListener {
+            retakeImage()
+        }
+    }
+
+    private fun setupCamera() {
+        val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
+        cameraProviderFuture.addListener(Runnable {
+            cameraProvider = cameraProviderFuture.get()
+            val preview: Preview = Preview.Builder().build()
+
+            val cameraSelector: CameraSelector = CameraSelector.Builder()
+                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+                .build()
+
+            preview.setSurfaceProvider(binding.previewView.surfaceProvider)
+
+            imageCapture = ImageCapture.Builder()
+                .setTargetRotation(requireView().display.rotation)
+                .build()
+
+            cameraProvider.bindToLifecycle(this, cameraSelector, imageCapture, preview)
+        }, ContextCompat.getMainExecutor(requireContext()))
+    }
+
+    private fun captureImage() {
+        imageCapture.takePicture(ContextCompat.getMainExecutor(requireContext()), object : ImageCapture.OnImageCapturedCallback() {
+            override fun onCaptureSuccess(image: ImageProxy) {
+                val buffer = image.planes[0].buffer
+                val bytes = ByteArray(buffer.remaining())
+                buffer.get(bytes)
+                var bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.size)
+                val orientation = resources.configuration.orientation
+                if(orientation == Configuration.ORIENTATION_PORTRAIT){
+                    bitmap = rotateBitmap90(bitmap)
+                }else{
+                    bitmap = rotateBitmap180(bitmap)
+                }
+                displayCapturedImage(bitmap)
+                image.close()
+                cameraProvider.unbindAll()
+            }
+
+            override fun onError(exception: ImageCaptureException) {
+                // Handle capture error
+                Toast.makeText(requireContext(), "Capture failed: ${exception.message}", Toast.LENGTH_SHORT).show()
+            }
+        })
+    }
+
+    private fun retakeImage() {
+        // Clear the captured image and hide the retake button
+        binding.imageView.setImageBitmap(null)
+        binding.retakeButton.visibility = View.GONE
+        // Show capture button
+        binding.capture.visibility = View.VISIBLE
+        binding.previewView.visibility = View.VISIBLE
+        binding.imageView.visibility = View.GONE
+        setupCamera()
+    }
+
+    private fun displayCapturedImage(bitmap: Bitmap?) {
+        binding.imageView.setImageBitmap(bitmap)
+        binding.imageView.scaleType = ImageView.ScaleType.CENTER_CROP
+
+        // Show/hide appropriate views
+        binding.retakeButton.visibility = View.VISIBLE
+        binding.previewView.visibility = View.GONE
+        binding.capture.visibility = View.GONE
+        binding.imageView.visibility = View.VISIBLE
+    }
+
+    fun rotateBitmap90(bitmap: Bitmap): Bitmap {
+        val matrix = Matrix()
+        matrix.postRotate(90f)
+        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
+    }
+    fun rotateBitmap180(bitmap: Bitmap): Bitmap {
+        val matrix = Matrix()
+        matrix.postRotate(180f)
+        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
+    }
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+        cameraProvider.unbindAll()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/Graphs.kt b/app/src/main/java/com/example/android_hit/Graphs.kt
new file mode 100644
index 0000000000000000000000000000000000000000..623317f34773541b9a1c822dde038559abd04555
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/Graphs.kt
@@ -0,0 +1,103 @@
+package com.example.android_hit
+
+
+import java.text.NumberFormat
+import java.util.Locale
+import android.graphics.Color
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.example.android_hit.adapter.TransactionAdapter
+import com.example.android_hit.databinding.FragmentGraphsBinding
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.example.android_hit.utils.MyValueFormatter
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+import com.github.mikephil.charting.data.PieData
+import com.github.mikephil.charting.data.PieDataSet
+import com.github.mikephil.charting.data.PieEntry
+import com.github.mikephil.charting.formatter.PercentFormatter
+
+
+class Graphs : Fragment() {
+    private lateinit var binding: FragmentGraphsBinding
+    private lateinit var pieChart: PieChart
+    private lateinit var adapter: TransactionAdapter
+    private lateinit var database: TransactionDB
+    private var list = mutableListOf<TransactionEntity>()
+
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        binding = FragmentGraphsBinding.inflate(inflater, container, false)
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        adapter = TransactionAdapter(list)
+        database = TransactionDB.getInstance(requireContext())
+        getData()
+
+        pieChart = view.findViewById(R.id.pie_chart)
+        val list:ArrayList<PieEntry> = ArrayList()
+
+        val totalExpenseAmount = database.transactionDao.getTotalExpense().toFloat()
+        val totalIncomeAmount = database.transactionDao.getTotalIncome().toFloat()
+        Log.e("PIE", totalIncomeAmount.toString())
+        Log.e("PIE", totalExpenseAmount.toString())
+        val percentageExpense = (totalExpenseAmount/(totalExpenseAmount+totalIncomeAmount))*100
+        val percentageIncome = (totalIncomeAmount/(totalExpenseAmount+totalIncomeAmount))*100
+        Log.e("PIE", percentageExpense.toString())
+        Log.e("PIE", percentageIncome.toString())
+
+        list.add(PieEntry(percentageExpense,"Expense"))
+        list.add(PieEntry(percentageIncome,"Income"))
+
+        val pieDataSet= PieDataSet(list,"")
+        val colors = ArrayList<Int>()
+        colors.add(Color.parseColor("#EFDAC7"))
+        colors.add(Color.parseColor("#B1B8D8"))
+
+
+        pieDataSet.colors = colors
+        pieDataSet.valueTextColor= Color.BLACK
+        pieDataSet.valueTextSize=15f
+        pieDataSet.valueFormatter = MyValueFormatter()
+
+        val pieData= PieData(pieDataSet)
+
+        pieChart.data= pieData
+        pieChart.description.isEnabled = false
+        pieChart.legend.textSize = 18f
+        pieChart.legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+        pieChart.legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+        pieChart.legend.orientation = Legend.LegendOrientation.HORIZONTAL
+        pieChart.setDrawEntryLabels(false)
+
+        pieChart.animateY(2000)
+    }
+
+    private fun getData() {
+        list.clear()
+        list.addAll(database.transactionDao.getAllTransaction())
+        adapter.notifyDataSetChanged()
+        val totalExpenseAmount = database.transactionDao.getTotalExpense()
+        val currencyFormat = NumberFormat.getCurrencyInstance(Locale("id", "ID"))
+        binding.expenseValueText.text = currencyFormat.format(totalExpenseAmount)
+        val totalIncomeAmount = database.transactionDao.getTotalIncome()
+        binding.incomeValueText.text = currencyFormat.format(totalIncomeAmount)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        getData()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderDetailTransaction.kt b/app/src/main/java/com/example/android_hit/HeaderDetailTransaction.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3c645149b8ee7d10c1b73170c82bb90be3f8228b
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderDetailTransaction.kt
@@ -0,0 +1,60 @@
+package com.example.android_hit
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.example.android_hit.databinding.FragmentHeaderDetailTransactionBinding
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderDetailTransaction.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderDetailTransaction : Fragment() {
+    private var _binding: FragmentHeaderDetailTransactionBinding? = null
+    private val binding get() = _binding!!
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_detail_transaction, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        _binding = FragmentHeaderDetailTransactionBinding.bind(view)
+
+        binding.buttonBack.setOnClickListener {
+            val intent = Intent(requireContext(), MainActivity::class.java)
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
+            startActivity(intent)
+        }
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderDetailTransaction.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic fun newInstance(param1: String, param2: String) =
+                HeaderDetailTransaction().apply {
+                    arguments = Bundle().apply {
+                        putString(ARG_PARAM1, param1)
+                        putString(ARG_PARAM2, param2)
+                    }
+                }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderGraphs.kt b/app/src/main/java/com/example/android_hit/HeaderGraphs.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ba03b663871441ca1982c732470c02337b4a0219
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderGraphs.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderGraphs.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderGraphs : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_graphs, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderGraphs.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderGraphs().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderNetwork.kt b/app/src/main/java/com/example/android_hit/HeaderNetwork.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c5409f42afb2c1351f5f6160fe54b9049c590df8
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderNetwork.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderNetwork.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderNetwork : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_network, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderNetwork.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderNetwork().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderScan.kt b/app/src/main/java/com/example/android_hit/HeaderScan.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e92e74145ff2d357ff669faa38c44c6ee247f8ce
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderScan.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderScan.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderScan : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_scan, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderScan.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderScan().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderSettings.kt b/app/src/main/java/com/example/android_hit/HeaderSettings.kt
new file mode 100644
index 0000000000000000000000000000000000000000..83efb8130067881fc1895e4b33b8c1c71f0e6d93
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderSettings.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderSettings.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderSettings : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_settings, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderSettings.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderSettings().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderTransaction.kt b/app/src/main/java/com/example/android_hit/HeaderTransaction.kt
new file mode 100644
index 0000000000000000000000000000000000000000..10d9657a06df2a8e1b91f8c71ab75bc1f73e02a5
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderTransaction.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderTransaction.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderTransaction : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_transaction, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderTransaction.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderTransaction().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/HeaderTwibbon.kt b/app/src/main/java/com/example/android_hit/HeaderTwibbon.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ed71eb162eb3f540d87944ce7f2a7cc657a1340d
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/HeaderTwibbon.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [HeaderTwibbon.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class HeaderTwibbon : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_header_twibbon, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment HeaderTwibbon.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            HeaderTwibbon().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/LoginActivity.kt b/app/src/main/java/com/example/android_hit/LoginActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b0e6e364867b5065249cce710164ed0418cd942f
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/LoginActivity.kt
@@ -0,0 +1,64 @@
+package com.example.android_hit
+
+import android.app.AlertDialog
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import android.widget.Button
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentManager
+import com.example.android_hit.utils.TokenManager
+
+class LoginActivity : AppCompatActivity() {
+
+    private lateinit var fragmentManager : FragmentManager
+    private lateinit var toLoginPageButton : Button
+    private lateinit var sharedPref : TokenManager
+
+    private fun initComponent(){
+        toLoginPageButton = findViewById(R.id.toLoginPageButton)
+    }
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_login)
+        initComponent()
+        sharedPref = TokenManager(this)
+
+
+        //Cek kalo user dah login
+        val isLogin = sharedPref.isLogin("IS_LOGIN")
+        if(isLogin){
+            //nyalain lagi background service trus dilempar ke page home
+            val serviceIntent = Intent(this, CheckJWTBackground::class.java)
+            this.startService(serviceIntent)
+            goToHome()
+        }
+
+        toLoginPageButton.setOnClickListener {
+                it.visibility = View.GONE
+                fragmentManager = supportFragmentManager
+                fragmentManager.beginTransaction().replace(R.id.loginActivity, LoginFragment()).commit()
+
+        }
+
+    }
+    private fun goToHome(){
+        val intent = Intent(this, MainActivity::class.java)
+        startActivity(intent)
+    }
+
+    fun showNetworkDialog(): AlertDialog {
+        val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this)
+        alertDialogBuilder.setTitle("No Internet Connection")
+        alertDialogBuilder.setMessage("Please check your internet connection")
+        alertDialogBuilder.setCancelable(false)
+
+        alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
+            dialog.dismiss()
+        }
+
+        val alertDialog: AlertDialog = alertDialogBuilder.create()
+        alertDialog.show()
+        return alertDialog
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/LoginFragment.kt b/app/src/main/java/com/example/android_hit/LoginFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6427577f47c10230aaff45812a456890924d877c
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/LoginFragment.kt
@@ -0,0 +1,149 @@
+package com.example.android_hit
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.Intent
+import android.net.ConnectivityManager
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.EditText
+import android.widget.Toast
+import androidx.fragment.app.Fragment
+import com.example.android_hit.api.RetrofitClient
+import com.example.android_hit.data.LoginPayload
+import com.example.android_hit.data.LoginResponse
+import com.example.android_hit.data.TokenResponse
+import com.example.android_hit.utils.CryptoManager
+import com.example.android_hit.utils.TokenManager
+import com.example.android_hit.utils.UserManager
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+
+
+class LoginFragment : Fragment() {
+
+    private lateinit var emailInput : EditText
+    private lateinit var passwordInput : EditText
+    private lateinit var loginButton : Button
+
+    private lateinit var sharedPref : TokenManager
+    private lateinit var userPref : UserManager
+
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_login, container, false)
+    }
+
+
+    @SuppressLint("UseRequireInsteadOfGet")
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        sharedPref = this.context?.let { TokenManager(it) }!!
+        userPref = this.context?.let {UserManager(it)}!!
+        val cryptoManager = CryptoManager()
+        emailInput = view.findViewById(R.id.emailInputField)
+        passwordInput = view.findViewById(R.id.passwordInputField)
+        loginButton = view.findViewById(R.id.loginButton)
+
+        val isLogin = sharedPref.isLogin("IS_LOGIN")
+        if(isLogin){
+            goToHome()
+        }
+
+
+        loginButton.setOnClickListener {
+            val context = context
+            if (context != null && isNetworkAvailable(context)) {
+                val emailValue = emailInput.text.toString()
+                val passwordValue = passwordInput.text.toString()
+                val passEncrypt = cryptoManager.encrypt(passwordValue)
+                userPref.putEmail("EMAIL", emailValue)
+                userPref.putPassword("PASS", passEncrypt)
+                val data = LoginPayload(emailValue,passwordValue)
+                login(data)
+            } else {
+                (activity as? LoginActivity)?.showNetworkDialog()
+            }
+        }
+    }
+
+    private fun goToHome(){
+        val intent = Intent(activity, MainActivity::class.java)
+        startActivity(intent)
+    }
+
+
+    //tembak api login
+    private fun login(data:LoginPayload){
+        RetrofitClient.apiService.login(data).enqueue(object : Callback<LoginResponse> {
+            override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
+                if (response.isSuccessful) {
+                    val responseBody = response.body()
+                    sharedPref.putToken("TOKEN", responseBody!!.token)
+                    sharedPref.putIsLogin("IS_LOGIN",true)
+                    Toast.makeText(context, "Login Success", Toast.LENGTH_SHORT).show()
+
+                    checkToken(responseBody.token)
+                    val serviceIntent = Intent(context, CheckJWTBackground::class.java)
+                    context?.startService(serviceIntent)
+                    goToHome()
+
+
+                } else {
+                    val errMes = response.errorBody()?.string()
+                    Log.e("POST Error", "Failed to make POST request: $errMes")
+                    Toast.makeText(context, "Login Failed: $errMes", Toast.LENGTH_SHORT).show()
+                }
+            }
+            override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
+                Log.e("POST Error", "Failed to make POST request: ${t.message}")
+            }
+        })
+    }
+
+    //tembak api auth/token
+    private fun checkToken(token: String){
+        RetrofitClient.apiService.cekToken(token = "Bearer $token").enqueue(object : Callback<TokenResponse> {
+            override fun onResponse(call: Call<TokenResponse>, response: Response<TokenResponse>) {
+                if (response.isSuccessful) {
+                    // Handle successful response
+                    val responseData = response.body()
+                    if (responseData != null) {
+                        sharedPref.putNIM("NIM_USER",responseData.nim)
+                        Log.i("TOKEN1", responseData.nim)
+                    }
+                    if (responseData != null) {
+                        sharedPref.putEXP("EXP_TIME",responseData.exp)
+                        Log.i("TOKEN1", responseData.exp.toString())
+                    }
+
+
+                } else {
+                    response.errorBody()?.let { it1 -> Log.i("TOKEN1", it1.string()) }
+                }
+            }
+
+            override fun onFailure(call: Call<TokenResponse>, t: Throwable) {
+                // Handle failure
+                // This method is called when the HTTP call fails
+            }
+        })
+    }
+    fun isNetworkAvailable(context: Context): Boolean {
+        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val networkInfo = connectivityManager.activeNetworkInfo
+        return networkInfo != null && networkInfo.isConnected
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/MainActivity.kt b/app/src/main/java/com/example/android_hit/MainActivity.kt
index deff4aed3850a0ea14d37b3ab3c28806bcf40841..23388d2b9bad5e0cd924afb55d58022b732b940a 100644
--- a/app/src/main/java/com/example/android_hit/MainActivity.kt
+++ b/app/src/main/java/com/example/android_hit/MainActivity.kt
@@ -1,11 +1,210 @@
 package com.example.android_hit
 
-import androidx.appcompat.app.AppCompatActivity
+import android.app.AlertDialog
+import android.content.Intent
+import android.content.res.Configuration
 import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import com.example.android_hit.api.RetrofitClient
+import com.example.android_hit.data.LoginPayload
+import com.example.android_hit.data.LoginResponse
+import com.example.android_hit.data.TokenResponse
+import com.example.android_hit.databinding.ActivityMainBinding
+import com.example.android_hit.utils.CryptoManager
+import com.example.android_hit.utils.TokenManager
+import com.example.android_hit.utils.UserManager
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
 
 class MainActivity : AppCompatActivity() {
+    private lateinit var binding: ActivityMainBinding
+    private lateinit var userPref : UserManager
+    private lateinit var sharedPref : TokenManager
+    private lateinit var cryptoManager: CryptoManager
+
+    private lateinit var dialog : AlertDialog
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        setContentView(R.layout.activity_main)
+        binding = ActivityMainBinding.inflate(layoutInflater)
+        userPref = UserManager(this)
+        sharedPref = TokenManager(this)
+        cryptoManager = CryptoManager()
+
+        val networkManager = NetworkManager(this)
+        var networkDialog: AlertDialog? = null
+
+        networkManager.observe(this) { isConnected ->
+            if (!isConnected) {
+                networkDialog = showNetworkDialog()
+            } else {
+                networkDialog?.dismiss()
+                networkDialog = null
+            }
+        }
+        setContentView(binding.root)
+
+        setCurrentFragment(Transaction(), HeaderTransaction())
+        val orientation = resources.configuration.orientation
+        if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+            binding.bottomNavigation?.setOnItemSelectedListener {
+                when (it.itemId) {
+                    R.id.nav_transaction -> {
+                        //                    if(!networkManager.value!!){
+                        //                        setCurrentFragment(NetworkError(), HeaderNetwork())
+                        //                    }else{
+                        //                        setCurrentFragment(Transaction(), HeaderTransaction())
+                        //                    }
+                        setCurrentFragment(Transaction(), HeaderTransaction())
+                    }
+
+                    R.id.nav_scan -> {
+                        setCurrentFragment(Scan(), HeaderScan())
+                    }
+
+                    R.id.nav_graphs -> {
+                        setCurrentFragment(Graphs(), HeaderGraphs())
+                    }
+
+                    R.id.nav_settings -> {
+                        setCurrentFragment(Settings(), HeaderSettings())
+                    }
+                    R.id.nav_twibbon -> {
+                        setCurrentFragment(FragmentTwibbon(), HeaderTwibbon())
+                    }
+                }
+                true
+            }
+        } else {
+            binding.navigationView?.setOnItemSelectedListener { item ->
+                when (item.itemId) {
+                    R.id.nav_transaction -> setCurrentFragment(Transaction(), HeaderTransaction())
+                    R.id.nav_scan -> setCurrentFragment(Scan(), HeaderScan())
+                    R.id.nav_twibbon -> setCurrentFragment(FragmentTwibbon(), HeaderTwibbon())
+                    R.id.nav_graphs -> setCurrentFragment(Graphs(), HeaderGraphs())
+                    R.id.nav_settings -> setCurrentFragment(Settings(), HeaderSettings())
+                }
+                true
+            }
+        }
+
+        //Keluarin pop up kalo token dah abis, sama matiin background service
+        if (intent.getBooleanExtra("show_confirmation", false)) {
+            val serviceIntent = Intent(this, CheckJWTBackground::class.java)
+            this.stopService(serviceIntent)
+            showConfirmationDialog()
+        }
+
+    }
+    fun showNetworkDialog(): AlertDialog {
+        val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this)
+        alertDialogBuilder.setTitle("No Internet Connection")
+        alertDialogBuilder.setMessage("Please check your internet connection")
+        alertDialogBuilder.setCancelable(false)
+
+        alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
+            dialog.dismiss()
+        }
+
+        val alertDialog: AlertDialog = alertDialogBuilder.create()
+        alertDialog.show()
+        return alertDialog
+    }
+
+    private fun setCurrentFragment(fragment: Fragment, header: Fragment) =
+        supportFragmentManager.beginTransaction().apply {
+            replace(R.id.frame_layout, fragment)
+            replace(R.id.header_layout, header)
+            commit()
+        }
+    private fun showConfirmationDialog() {
+        val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this)
+        alertDialogBuilder.setTitle("Token Expired")
+        alertDialogBuilder.setMessage("Your token has expired. Do you want to renew it?")
+        alertDialogBuilder.setCancelable(false)
+
+        alertDialogBuilder.setPositiveButton("Yes") { _, _ ->
+            reLogin()
+            finish()
+        }
+
+        alertDialogBuilder.setNegativeButton("No") { dialog, _ ->
+            goToStart()
+            dialog.dismiss()
+        }
+
+        val alertDialog: AlertDialog = alertDialogBuilder.create()
+        alertDialog.show()
+    }
+
+    private fun goToStart(){
+        val intent = Intent(this, LoginActivity::class.java)
+        startActivity(intent)
+    }
+
+    private fun reLogin(){
+        val emailValue = userPref.getEmail("EMAIL")!!
+        val passwordValue = userPref.getPassword("PASS")!!
+        val passDecrpt = cryptoManager.decrypt(passwordValue)
+        Log.e("RELOG", "email $emailValue")
+        Log.e("RELOG", "pass $passwordValue")
+        Log.e("RELOG","passd $passDecrpt")
+
+        val data = LoginPayload(emailValue,passDecrpt)
+        RetrofitClient.apiService.login(data).enqueue(object : Callback<LoginResponse> {
+            override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
+                if (response.isSuccessful) {
+                    val responseBody = response.body()
+                    sharedPref.putToken("TOKEN", responseBody!!.token)
+                    sharedPref.putIsLogin("IS_LOGIN",true)
+                    Toast.makeText(this@MainActivity, "Login Success", Toast.LENGTH_SHORT).show()
+
+                    checkToken(responseBody.token)
+                    val serviceIntent = Intent(this@MainActivity, CheckJWTBackground::class.java)
+                    this@MainActivity.startService(serviceIntent)
+
+                } else {
+                    Log.e("POST Error", "Failed to make POST request: ${response.message()}")
+                    Toast.makeText(this@MainActivity, "Login Failed: ${response.message()}", Toast.LENGTH_SHORT).show()
+                }
+            }
+            override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
+                Log.e("POST Error", "Failed to make POST request: ${t.message}")
+            }
+        })
+
+        Log.e("RELOG","test 123")
+    }
+
+    private fun checkToken(token: String){
+        RetrofitClient.apiService.cekToken(token = "Bearer $token").enqueue(object : Callback<TokenResponse> {
+            override fun onResponse(call: Call<TokenResponse>, response: Response<TokenResponse>) {
+                if (response.isSuccessful) {
+                    // Handle successful response
+                    val responseData = response.body()
+                    if (responseData != null) {
+                        sharedPref.putNIM("NIM_USER",responseData.nim)
+                        Log.i("TOKEN1", responseData.nim)
+                    }
+                    if (responseData != null) {
+                        sharedPref.putEXP("EXP_TIME",responseData.exp)
+                        Log.i("TOKEN1", responseData.exp.toString())
+                    }
+
+
+                } else {
+                    response.errorBody()?.let { it1 -> Log.i("TOKEN1", it1.string()) }
+                }
+            }
+
+            override fun onFailure(call: Call<TokenResponse>, t: Throwable) {
+                // Handle failure
+                // This method is called when the HTTP call fails
+            }
+        })
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/android_hit/NetworkError.kt b/app/src/main/java/com/example/android_hit/NetworkError.kt
new file mode 100644
index 0000000000000000000000000000000000000000..faeceb8f15ff12b5053691bdf56386fb81e54473
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/NetworkError.kt
@@ -0,0 +1,59 @@
+package com.example.android_hit
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [NetworkError.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class NetworkError : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_network_error, container, false)
+    }
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment NetworkError.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            NetworkError().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/NetworkManager.kt b/app/src/main/java/com/example/android_hit/NetworkManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1d474c623dd9902b7dcfa222aa7aba404c714239
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/NetworkManager.kt
@@ -0,0 +1,71 @@
+package com.example.android_hit
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import androidx.lifecycle.LiveData
+
+class NetworkManager(context: Context) : LiveData<Boolean>() {
+//    private val _isNetworkAvailable = MutableLiveData<Boolean>()
+//    val isNetworkAvailable: LiveData<Boolean> get() = _isNetworkAvailable
+
+
+
+    private var connectivityManager =
+        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+
+    private val networkCallback = object : ConnectivityManager.NetworkCallback() {
+        // network is available for use
+        override fun onAvailable(network: Network) {
+            super.onAvailable(network)
+            postValue(true)
+        }
+
+        override fun onUnavailable() {
+            super.onUnavailable()
+            postValue(false)
+        }
+
+        // Network capabilities have changed for the network
+//        override fun onCapabilitiesChanged(
+//            network: Network,
+//            networkCapabilities: NetworkCapabilities
+//        ) {
+//            super.onCapabilitiesChanged(network, networkCapabilities)
+//            val unmetered =
+//                networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
+//        }
+
+        // lost network connection
+        override fun onLost(network: Network) {
+            super.onLost(network)
+            postValue(false)
+        }
+    }
+    private fun checkNetworkConnectivity() {
+        val network = connectivityManager.activeNetwork
+        if(network == null){
+           postValue(false)
+        }
+        val requestBuilder = NetworkRequest.Builder().apply {
+            addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+            addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+            addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+            addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+            addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+        }.build()
+        connectivityManager.registerNetworkCallback(requestBuilder, networkCallback)
+    }
+
+    override fun onActive() {
+        super.onActive()
+        checkNetworkConnectivity()
+    }
+
+    override fun onInactive() {
+        super.onInactive()
+        connectivityManager.unregisterNetworkCallback(networkCallback)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/Scan.kt b/app/src/main/java/com/example/android_hit/Scan.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7ed471b90393f1fac2eca9360668848c5e06930c
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/Scan.kt
@@ -0,0 +1,319 @@
+package com.example.android_hit
+
+import android.Manifest
+import android.app.Activity
+import android.app.AlertDialog
+import android.content.Context
+import android.content.DialogInterface
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.graphics.Bitmap
+import android.graphics.ImageDecoder
+import android.net.ConnectivityManager
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.provider.MediaStore
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.Fragment
+import com.example.android_hit.api.RetrofitClient
+import com.example.android_hit.data.ScanResponse
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.example.android_hit.utils.TokenManager
+import okhttp3.MediaType.Companion.toMediaTypeOrNull
+import okhttp3.MultipartBody
+import okhttp3.RequestBody.Companion.toRequestBody
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.FileOutputStream
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+
+class Scan : Fragment() {
+    var pickedPhoto : Uri? = null
+    var pickedBitMap : Bitmap? = null
+    private val CAMERA_REQUEST_CODE = 1
+    private lateinit var btnCapture : Button
+    private lateinit var btnPick : Button
+    private lateinit var ivPicture : ImageView
+    private lateinit var sharedPref : TokenManager
+
+
+
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments?.let {
+
+        }
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_scan, container, false)
+    }
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        btnCapture = view.findViewById(R.id.captureImgBtn)
+        ivPicture = view.findViewById(R.id.captureImageView)
+        btnPick = view.findViewById(R.id.pickImgBtn)
+        btnCapture.isEnabled = true
+        sharedPref = TokenManager(requireContext())
+        if(ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.CAMERA)
+            != PackageManager.PERMISSION_GRANTED){
+            ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.CAMERA),
+                100)
+        } else{
+            btnCapture.isEnabled = true
+        }
+        btnPick.setOnClickListener {
+            openGallery()
+        }
+
+
+        btnCapture.setOnClickListener{
+            val i = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
+            startActivityForResult(i, 101)
+        }
+
+    }
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+        if(requestCode == 101){
+            var pic : Bitmap? = data?.getParcelableExtra<Bitmap>("data")
+            ivPicture.setImageBitmap(pic)
+            pickedBitMap = pic
+            val savedImageUri = saveImageToInternalStorage(pickedBitMap!!)
+            pickedPhoto = savedImageUri
+            Handler(Looper.getMainLooper()).postDelayed({
+                if(isNetworkAvailable(requireContext())){
+                    showConfirmationDialog()
+                }
+
+            }, 700)
+
+        }
+//        if(requestCode == 2 && resultCode == Activity.RESULT_OK && data != null){
+//            pickedPhoto = data.data
+//            if(Build.VERSION.SDK_INT>=20){
+//                val source = ImageDecoder.createSource(requireContext().contentResolver, pickedPhoto!!)
+//                pickedBitMap = ImageDecoder.decodeBitmap(source)
+//                ivPicture.setImageBitmap(pickedBitMap)
+//                Handler(Looper.getMainLooper()).postDelayed({
+//                    showConfirmationDialog()
+//                }, 700)
+//            }else{
+//                pickedBitMap = MediaStore.Images.Media.getBitmap(requireContext().contentResolver, pickedPhoto)
+//                ivPicture.setImageBitmap(pickedBitMap)
+//                Handler(Looper.getMainLooper()).postDelayed({
+//                    showConfirmationDialog()
+//                }, 700)
+//
+//            }
+//        }
+
+        if(requestCode == 2 && resultCode == Activity.RESULT_OK && data != null){
+            pickedPhoto = data.data
+            if (pickedPhoto == null) {
+                Toast.makeText(requireContext(), "Error getting selected file", Toast.LENGTH_SHORT).show()
+                return
+            }
+
+            // Load the image and display it in the ImageView
+            val bitmap = try {
+                if (Build.VERSION.SDK_INT >= 28) {
+                    val source = ImageDecoder.createSource(requireContext().contentResolver, pickedPhoto!!)
+                    ImageDecoder.decodeBitmap(source)
+                } else {
+                    MediaStore.Images.Media.getBitmap(requireContext().contentResolver, pickedPhoto!!)
+                }
+            } catch (e: Exception) {
+                Toast.makeText(requireContext(), "Error getting selected file: ${e.message}", Toast.LENGTH_SHORT).show()
+                return
+            }
+
+            ivPicture.setImageBitmap(bitmap)
+            pickedBitMap = bitmap
+            Handler(Looper.getMainLooper()).postDelayed({
+                if(isNetworkAvailable(requireContext())){
+                    showConfirmationDialog()
+                    }
+
+            }, 700)
+        }
+
+    }
+
+    private fun openGallery() {
+
+        val photoPickerIntent = Intent(Intent.ACTION_PICK)
+        photoPickerIntent.type = "image/*"
+        startActivityForResult(photoPickerIntent, 2)
+    }
+    private val galleryLauncher =
+        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+            if (result.resultCode == Activity.RESULT_OK) {
+                val selectedImageUri: Uri? = result.data?.data
+                // Do something with the selected image URI
+                // For example, display it in an ImageView
+                loadSelectedImage(selectedImageUri)
+            }
+        }
+    private fun loadSelectedImage(imageUri: Uri?) {
+        // Check for null
+        if (imageUri == null) {
+            return
+        }
+
+        // Load the image and display it in the ImageView
+        val bitmap = if (Build.VERSION.SDK_INT >= 28) {
+            val source = ImageDecoder.createSource(requireContext().contentResolver, imageUri)
+            ImageDecoder.decodeBitmap(source)
+        } else {
+            MediaStore.Images.Media.getBitmap(requireContext().contentResolver, imageUri)
+        }
+
+        ivPicture.setImageBitmap(bitmap)
+    }
+    private fun saveImageToInternalStorage(bitmap: Bitmap?): Uri? {
+        // Check for null
+        if (bitmap == null) {
+            return null
+        }
+
+        // Save the bitmap to a file
+        val filename = "${System.currentTimeMillis()}.jpg"
+        val file = File(requireContext().externalCacheDir, filename)
+        val fileOutputStream = FileOutputStream(file)
+        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
+        fileOutputStream.close()
+
+        // Get the Uri of the file
+        return Uri.fromFile(file)
+    }
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<out String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if(requestCode==100 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
+            btnCapture.isEnabled = true
+        }
+        if(grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
+            val galleryIntext = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+            startActivityForResult(galleryIntext, 2)
+
+        }
+
+    }
+    fun pickedPhoto() {
+        if(ContextCompat.checkSelfPermission(requireContext(), android.Manifest.permission.READ_EXTERNAL_STORAGE)
+            != PackageManager.PERMISSION_GRANTED){
+            ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
+                1)
+        } else{
+            val galleryIntext = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+            startActivityForResult(galleryIntext, 2)
+        }
+    }
+    private fun showConfirmationDialog() {
+        val alertDialogBuilder = AlertDialog.Builder(this.context)
+        alertDialogBuilder.apply {
+            setTitle("Confirmation")
+            setMessage("Are you sure to use this image?")
+            setPositiveButton("Yes") { dialogInterface: DialogInterface, _: Int ->
+
+
+                dialogInterface.dismiss()
+
+                val byteArrayOutputStream = ByteArrayOutputStream()
+                pickedBitMap?.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)
+                val byteArray = byteArrayOutputStream.toByteArray()
+
+                val requestBody = byteArray.toRequestBody("image/jpg".toMediaTypeOrNull())
+
+                val token = sharedPref.getToken()
+                val file = File(pickedPhoto?.path)
+                val filePart = MultipartBody.Part.createFormData("file", file.name, requestBody)
+                val call = RetrofitClient.apiService.uploadNota("Bearer $token", filePart)
+                call.enqueue(object : Callback<ScanResponse> {
+                    override fun onResponse(call: Call<ScanResponse>, response: Response<ScanResponse>) {
+                        if (response.isSuccessful) {
+                            val responseBody = response.body()
+                            Log.e("POST Success", "Response: ${responseBody.toString()}")
+                            Toast.makeText(requireContext(), "Upload Success", Toast.LENGTH_SHORT).show()
+
+                            val items = responseBody?.items?.items
+
+                            val db = TransactionDB.getInstance(requireContext())
+                            val transactionDao = db.transactionDao
+
+                            items?.forEach { item ->
+                                val amount = item.qty * item.price
+                                val timestamp = System.currentTimeMillis()
+                                val sdf = SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault())
+                                val currentDateAndTime: String = sdf.format(Date(timestamp))
+                                val transaction = TransactionEntity(
+                                    title = item.name,
+                                    amount = amount.toInt(),
+                                    category = "Expense",
+                                    location = "Location",
+                                    coordinate = "0,0", // Replace with actual coordinate
+                                    timestamp = currentDateAndTime
+
+
+                                )
+
+                                // Insert the transaction into the database
+                                transactionDao.addTransaction(transaction)
+                            }
+
+                        } else {
+                            Log.e("POST Error", "Failed to make POST request: ${response.message()}")
+                            Toast.makeText(requireContext(), "Upload Failed: ${response.message()}", Toast.LENGTH_SHORT).show()
+                        }
+                    }
+                    override fun onFailure(call: Call<ScanResponse>, t: Throwable) {
+                        Log.e("POST Error", "Failed to make POST request: ${t.message}")
+                    }
+                })
+            }
+            setNegativeButton("No") { dialogInterface: DialogInterface, _: Int ->
+                dialogInterface.dismiss()
+                ivPicture.setImageBitmap(null)
+            }
+            setCancelable(false)
+        }
+
+        val alertDialog = alertDialogBuilder.create()
+        alertDialog.show()
+    }
+
+    fun isNetworkAvailable(context: Context): Boolean {
+        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val networkInfo = connectivityManager.activeNetworkInfo
+        return networkInfo != null && networkInfo.isConnected
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/Settings.kt b/app/src/main/java/com/example/android_hit/Settings.kt
new file mode 100644
index 0000000000000000000000000000000000000000..cd1fb776c1030aef912f2ee20f5e5b43431e081c
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/Settings.kt
@@ -0,0 +1,220 @@
+package com.example.android_hit
+
+import android.Manifest
+import android.annotation.SuppressLint
+import android.app.AlertDialog
+import android.content.DialogInterface
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.Bundle
+import android.os.Environment
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.TextView
+import android.widget.Toast
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.core.content.FileProvider
+import androidx.fragment.app.Fragment
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.example.android_hit.utils.TokenManager
+import com.example.android_hit.utils.UserManager
+import org.apache.poi.hssf.usermodel.HSSFWorkbook
+import org.apache.poi.xssf.usermodel.XSSFWorkbook
+import java.io.File
+import java.io.FileOutputStream
+import kotlin.random.Random
+
+class Settings : Fragment() {
+
+    private lateinit var sharedPref : TokenManager
+    private lateinit var logoutButton : Button
+    private lateinit var randomize : Button
+    private lateinit var emailTextView : TextView
+    private lateinit var user: UserManager
+    private val RANDOMIZE_ACTION = "com.example.android_hit.RANDOMIZE_ACTION"
+    private lateinit var saveButton: Button
+    private lateinit var sendButton: Button
+
+    @SuppressLint("UseRequireInsteadOfGet", "MissingInflatedId")
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        val view = inflater.inflate(R.layout.fragment_settings, container, false)
+        // Inflate the layout for this fragment
+        sharedPref = this.context?.let { TokenManager(it) }!!
+        user = this.context?.let { UserManager(it) }!!
+        logoutButton = view.findViewById(R.id.logoutButton)
+        emailTextView = view.findViewById(R.id.emailTextView)
+        randomize = view.findViewById(R.id.randomizeTransactionButton)
+        saveButton = view.findViewById(R.id.saveTransactionButton)
+        sendButton = view.findViewById(R.id.sendTransactionButton)
+        emailTextView.text = user.getEmail("EMAIL")
+        val database = TransactionDB.getInstance(requireContext())
+        val transactionDao = database.transactionDao
+        val transactions = transactionDao.getAllTransaction()
+        logoutButton.setOnClickListener {
+            showConfirmationDialog()
+        }
+
+        randomize.setOnClickListener {
+            goToTransaction()
+            Log.e("BROD","clicked randomize")
+            val randomIntInRange = Random.nextInt(1000, 100000)
+            val intent = Intent(RANDOMIZE_ACTION)
+            intent.putExtra("hargaRandom",randomIntInRange.toString())
+            LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
+
+        }
+        saveButton.setOnClickListener {
+            if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+                ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 0)
+            }
+            val fileFormats = arrayOf("xls", "xlsx")
+
+            AlertDialog.Builder(requireContext()).apply {
+                setTitle("Choose file format")
+                setItems(fileFormats) { dialog, which ->
+                    val fileFormat = fileFormats[which]
+                    val documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
+                    val documentsFolder = File(documentsDir, "Bondoman-Transaction")
+                    if (!documentsFolder.exists()) {
+                        documentsFolder.mkdirs()
+                    }
+                    val title = "transactions.$fileFormat"
+                    val file = File(documentsFolder, title)
+                    val fileOutputStream = FileOutputStream(file)
+                    saveTransactionsToExcel(transactions, fileFormat, fileOutputStream)
+                    fileOutputStream.close()
+                    Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT).show()
+                }
+                setNegativeButton("Cancel") { dialog, _ ->
+                    dialog.dismiss()
+                }
+            }.create().show()
+        }
+        sendButton.setOnClickListener {
+            val fileFormats = arrayOf("xls", "xlsx")
+
+            AlertDialog.Builder(requireContext()).apply {
+                setTitle("Choose file format")
+                setItems(fileFormats) { dialog, which ->
+                    val fileFormat = fileFormats[which]
+                    val documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
+                    val documentsFolder = File(documentsDir, "Bondoman-Transaction")
+                    if (!documentsFolder.exists()) {
+                        documentsFolder.mkdirs()
+                    }
+                    val title = "transactions.$fileFormat"
+                    val file = File(documentsFolder, title)
+                    val fileOutputStream = FileOutputStream(file)
+                    Log.e("SET","fileFormat $fileFormat")
+                    saveTransactionsToExcel(transactions, fileFormat, fileOutputStream)
+                    fileOutputStream.close()
+
+
+                    val uri = FileProvider.getUriForFile(requireContext(), "com.example.android_hit.fileprovider", file)
+                    val emailIntent = Intent(Intent.ACTION_SEND).apply {
+                        type = "*/*"
+                        putExtra(Intent.EXTRA_EMAIL, arrayOf(user.getEmail("EMAIL")))
+                        putExtra(Intent.EXTRA_SUBJECT, "Daftar Transaksi")
+                        putExtra(Intent.EXTRA_TEXT, "Berikut adalah daftar transaksi Anda.")
+                        putExtra(Intent.EXTRA_STREAM, uri)
+                        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+                    }
+
+                    Log.e("email","${user.getEmail("EMAIL")}")
+
+                    if (emailIntent.resolveActivity(requireContext().packageManager) != null) {
+                        startActivity(emailIntent)
+
+                    } else {
+                        Toast.makeText(requireContext(), "Tidak ada aplikasi email yang dapat menangani permintaan ini.", Toast.LENGTH_SHORT).show()
+                    }
+                }
+                setNegativeButton("Cancel") { dialog, _ ->
+                    dialog.dismiss()
+                }
+            }.create().show()
+        }
+
+        return view
+    }
+    private fun showConfirmationDialog() {
+        val alertDialogBuilder = AlertDialog.Builder(this.context)
+        alertDialogBuilder.apply {
+            setTitle("Confirmation")
+            setMessage("Are you sure you want to logout?")
+            setPositiveButton("Yes") { dialogInterface: DialogInterface, _: Int ->
+                Log.e("SET","masuk sini 2")
+                sharedPref.deleteToken()
+                val serviceIntent = Intent(context, CheckJWTBackground::class.java)
+                context.stopService(serviceIntent)
+                goToStart()
+                dialogInterface.dismiss()
+            }
+            setNegativeButton("No") { dialogInterface: DialogInterface, _: Int ->
+                dialogInterface.dismiss()
+            }
+            setCancelable(false)
+        }
+
+        val alertDialog = alertDialogBuilder.create()
+        alertDialog.show()
+    }
+
+    private fun goToStart(){
+        val intent = Intent(activity, LoginActivity::class.java)
+        startActivity(intent)
+    }
+
+    private fun goToTransaction(){
+        val intent = Intent(activity, DetailTransactionActivity::class.java)
+        startActivity(intent)
+    }
+
+
+
+    private fun saveTransactionsToExcel(transactions: List<TransactionEntity>, fileFormat:String, outputStream: FileOutputStream) {
+        Log.e("SET","fileFormat $fileFormat")
+
+        val workbook = if (fileFormat == "xls") {
+            HSSFWorkbook()
+        } else {
+            XSSFWorkbook()
+        }
+
+        val sheet = workbook.createSheet("Transactions")
+
+
+        val headerRow = sheet.createRow(0)
+        headerRow.createCell(0).setCellValue("ID")
+        headerRow.createCell(1).setCellValue("Title")
+        headerRow.createCell(2).setCellValue("Amount")
+        headerRow.createCell(3).setCellValue("Category")
+        headerRow.createCell(4).setCellValue("Location")
+        headerRow.createCell(5).setCellValue("Timestamp")
+
+        transactions.forEachIndexed { index, transaction ->
+            val row = sheet.createRow(index + 1)
+            row.createCell(0).setCellValue(transaction.id?.toDouble() ?: 0.0)
+            row.createCell(1).setCellValue(transaction.title)
+            row.createCell(2).setCellValue(transaction.amount.toDouble())
+            row.createCell(3).setCellValue(transaction.category)
+            row.createCell(4).setCellValue(transaction.location)
+            row.createCell(5).setCellValue(transaction.timestamp)
+        }
+        // Menyimpan workbook ke file
+        workbook.write(outputStream)
+        workbook.close()
+
+
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/Transaction.kt b/app/src/main/java/com/example/android_hit/Transaction.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3658c4469e2dd5d926e5ca722d920cc448ac43c4
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/Transaction.kt
@@ -0,0 +1,131 @@
+package com.example.android_hit
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.android_hit.adapter.TransactionAdapter
+import com.example.android_hit.databinding.FragmentTransactionBinding
+import com.example.android_hit.room.TransactionDB
+import com.example.android_hit.room.TransactionEntity
+import com.google.android.material.floatingactionbutton.FloatingActionButton
+import java.text.NumberFormat
+import java.util.Locale
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [Transaction.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class Transaction : Fragment() {
+    private lateinit var binding: FragmentTransactionBinding
+    private lateinit var recyclerView: RecyclerView
+    private lateinit var adapter: TransactionAdapter
+    private lateinit var database: TransactionDB
+    private lateinit var fab: FloatingActionButton
+    private var list = mutableListOf<TransactionEntity>()
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        binding = FragmentTransactionBinding.inflate(inflater, container, false)
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        recyclerView = binding.rvTransaction
+
+        fab = binding.fabAdd
+
+        recyclerView.layoutManager = LinearLayoutManager(requireContext())
+        recyclerView.addItemDecoration(
+            DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+        )
+
+        adapter = TransactionAdapter(list)
+        recyclerView.adapter = adapter
+        fab.setOnClickListener {
+            startActivity(Intent(requireContext(), DetailTransactionActivity::class.java))
+        }
+
+        adapter.setOnDeleteClickListener(object : TransactionAdapter.OnDeleteClickListener {
+            override fun onDeleteClick(position: Int) {
+                deleteTransaction(position)
+            }
+        })
+
+        database = TransactionDB.getInstance(requireContext())
+        getData()
+    }
+
+    private fun deleteTransaction(position: Int) {
+        val deletedItem = list[position]
+        if (deletedItem.category == "Expense") {
+            val expenseAmount = deletedItem.amount
+            val currentTotalExpense = database.transactionDao.getTotalExpense()
+            val newTotalExpense = currentTotalExpense - expenseAmount
+            binding.amountExpense.text = newTotalExpense.toString()
+        } else {
+            val incomeAmount = deletedItem.amount
+            val currentTotalIncome = database.transactionDao.getTotalIncome()
+            val newTotalIncome = currentTotalIncome - incomeAmount
+            binding.amountIncome.text = newTotalIncome.toString()
+        }
+        database.transactionDao.deleteTransaction(deletedItem)
+        list.removeAt(position)
+        adapter.notifyItemRemoved(position)
+        getIncomeExpense()
+    }
+
+    private fun getIncomeExpense() {
+        val currencyFormat = NumberFormat.getCurrencyInstance(Locale("id", "ID"))
+        val totalExpenseAmount = database.transactionDao.getTotalExpense()
+        val totalIncomeAmount = database.transactionDao.getTotalIncome()
+        binding.amountExpense.text = currencyFormat.format(totalExpenseAmount)
+        binding.amountIncome.text = currencyFormat.format(totalIncomeAmount)
+    }
+
+    private fun getData() {
+        list.clear()
+        list.addAll(database.transactionDao.getAllTransaction())
+        adapter.notifyDataSetChanged()
+        getIncomeExpense()
+    }
+
+    override fun onResume() {
+        super.onResume()
+        getData()
+    }
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment Transaction.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            Transaction().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/adapter/TransactionAdapter.kt b/app/src/main/java/com/example/android_hit/adapter/TransactionAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..222f10956ca194d13832072cfb32cb64a24a5b59
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/adapter/TransactionAdapter.kt
@@ -0,0 +1,78 @@
+package com.example.android_hit.adapter
+
+import android.content.Intent
+import android.net.Uri
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.core.content.ContextCompat
+import androidx.core.content.ContextCompat.startActivity
+import androidx.recyclerview.widget.RecyclerView
+import com.example.android_hit.DetailTransactionActivity
+import com.example.android_hit.R
+import com.example.android_hit.databinding.RowTransactionBinding
+import com.example.android_hit.room.TransactionEntity
+import java.text.NumberFormat
+import java.util.Locale
+
+class TransactionAdapter(private val list: MutableList<TransactionEntity>) : RecyclerView.Adapter<TransactionAdapter.TransactionViewHolder>() {
+
+    inner class TransactionViewHolder(private val binding: RowTransactionBinding) : RecyclerView.ViewHolder(binding.root){
+        fun bind(transaction: TransactionEntity) {
+            binding.apply {
+                title.text = transaction.title
+                val currencyFormat = NumberFormat.getCurrencyInstance(Locale("id", "ID"))
+                amount.text = currencyFormat.format(transaction.amount)
+                category.text = transaction.category
+                location.text = transaction.location
+                date.text = transaction.timestamp
+
+                val colorId = if (transaction.category == "Expense") R.color.secondary4 else R.color.secondary5
+                category.setTextColor(ContextCompat.getColor(binding.root.context, colorId))
+
+                deleteButton.setOnClickListener {
+                    onDeleteClickListener?.onDeleteClick(adapterPosition)
+                }
+
+                editButton.setOnClickListener {
+                    val intent = Intent(binding.root.context, DetailTransactionActivity::class.java)
+                    intent.putExtra("id", transaction.id)
+                    binding.root.context.startActivity(intent)
+                }
+
+                location.setOnClickListener {
+                    val locationUri = if (transaction.coordinate != "-6.927314530264154, 107.77007155415649") {
+                        "geo:0,0?q=${transaction.location}"
+                    } else {
+                        "geo:0,0?q=${transaction.coordinate}"
+                    }
+                    val mapIntent = Intent(Intent.ACTION_VIEW, Uri.parse(locationUri))
+                    mapIntent.setPackage("com.google.android.apps.maps")
+                    startActivity(binding.root.context, mapIntent, null)
+                }
+            }
+        }
+    }
+
+    interface OnDeleteClickListener {
+        fun onDeleteClick(position: Int)
+    }
+
+    private var onDeleteClickListener: OnDeleteClickListener? = null
+
+    fun setOnDeleteClickListener(listener: OnDeleteClickListener) {
+        onDeleteClickListener = listener
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransactionViewHolder {
+        val binding = RowTransactionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+        return TransactionViewHolder(binding)
+    }
+
+    override fun onBindViewHolder(holder: TransactionViewHolder, position: Int) {
+        holder.bind(list[position])
+    }
+
+    override fun getItemCount(): Int {
+        return list.size
+    }
+}
diff --git a/app/src/main/java/com/example/android_hit/api/ApiService.kt b/app/src/main/java/com/example/android_hit/api/ApiService.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8933b30ee2d9c8dfef7df28ca119b1e88fe8643d
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/api/ApiService.kt
@@ -0,0 +1,29 @@
+package com.example.android_hit.api
+
+import com.example.android_hit.data.LoginPayload
+import com.example.android_hit.data.LoginResponse
+import com.example.android_hit.data.ScanResponse
+import com.example.android_hit.data.TokenResponse
+import okhttp3.MultipartBody
+import retrofit2.Call
+import retrofit2.http.Body
+import retrofit2.http.Header
+import retrofit2.http.Multipart
+import retrofit2.http.POST
+import retrofit2.http.Part
+
+interface ApiService {
+
+    @POST("/api/auth/login")
+    fun login(@Body postData: LoginPayload): Call<LoginResponse>
+
+
+
+    @POST("/api/auth/token")
+    fun cekToken(@Header("Authorization") token: String): Call<TokenResponse>
+    @Multipart
+    @POST("/api/bill/upload")
+    fun uploadNota(@Header("Authorization") token: String,
+                   @Part file: MultipartBody.Part): Call<ScanResponse>
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/api/RetrofitClient.kt b/app/src/main/java/com/example/android_hit/api/RetrofitClient.kt
new file mode 100644
index 0000000000000000000000000000000000000000..02cd629ef6a97b3f61b8c756a9ce691d88a430ae
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/api/RetrofitClient.kt
@@ -0,0 +1,17 @@
+package com.example.android_hit.api
+
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+object RetrofitClient {
+    private const val BASE_URL = "https://pbd-backend-2024.vercel.app"
+
+    val apiService: ApiService by lazy {
+        val retrofit = Retrofit.Builder()
+            .baseUrl(BASE_URL)
+            .addConverterFactory(GsonConverterFactory.create())
+            .build()
+
+        retrofit.create(ApiService::class.java)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/data/LoginPayload.kt b/app/src/main/java/com/example/android_hit/data/LoginPayload.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6552e6fde150f997d35a7511fc4ea86d46119434
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/data/LoginPayload.kt
@@ -0,0 +1,6 @@
+package com.example.android_hit.data
+
+data class LoginPayload(
+    val email: String,
+    val password : String
+)
diff --git a/app/src/main/java/com/example/android_hit/data/LoginResponse.kt b/app/src/main/java/com/example/android_hit/data/LoginResponse.kt
new file mode 100644
index 0000000000000000000000000000000000000000..772ed288cccefad5b351d23e5aa3855bb0e0c41d
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/data/LoginResponse.kt
@@ -0,0 +1,5 @@
+package com.example.android_hit.data
+
+data class LoginResponse(
+    val token: String
+)
diff --git a/app/src/main/java/com/example/android_hit/data/ScanResponse.kt b/app/src/main/java/com/example/android_hit/data/ScanResponse.kt
new file mode 100644
index 0000000000000000000000000000000000000000..94b1062b4e4aeb855cddc8100cfa7fcf395b5f89
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/data/ScanResponse.kt
@@ -0,0 +1,13 @@
+package com.example.android_hit.data
+
+data class ScanResponse(
+    val items : Items
+)
+data class Items(
+    val items : List<Item>
+)
+data class Item(
+    val name : String,
+    val qty : Int,
+    val price : Double
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/data/TokenResponse.kt b/app/src/main/java/com/example/android_hit/data/TokenResponse.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ebd38c869913d6a31f93626ad173edf53f59da9f
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/data/TokenResponse.kt
@@ -0,0 +1,7 @@
+package com.example.android_hit.data
+
+data class TokenResponse(
+    val nim : String,
+    val iat : Int,
+    val exp : Int
+)
diff --git a/app/src/main/java/com/example/android_hit/data/model/LoggedInUser.kt b/app/src/main/java/com/example/android_hit/data/model/LoggedInUser.kt
new file mode 100644
index 0000000000000000000000000000000000000000..031ed8363c9092ae47a458a8ee97dd819c2d6d3e
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/data/model/LoggedInUser.kt
@@ -0,0 +1,9 @@
+package com.example.android_hit.data.model
+
+/**
+ * Data class that captures user information for logged in users retrieved from LoginRepository
+ */
+data class LoggedInUser(
+    val userId: String,
+    val displayName: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/room/TransactionDB.kt b/app/src/main/java/com/example/android_hit/room/TransactionDB.kt
new file mode 100644
index 0000000000000000000000000000000000000000..172598b297ef53f3a8a3111265ccb9490b2abc52
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/room/TransactionDB.kt
@@ -0,0 +1,36 @@
+package com.example.android_hit.room
+
+import android.content.Context
+import androidx.room.Database
+import androidx.room.Room
+import androidx.room.RoomDatabase
+
+@Database(
+    entities = [TransactionEntity::class],
+    version = 6,
+    exportSchema = false
+)
+abstract class TransactionDB : RoomDatabase() {
+
+    abstract val transactionDao: TransactionDao
+
+    companion object {
+        @Volatile
+        private var INSTANCE: TransactionDB? = null
+
+        fun getInstance(context: Context): TransactionDB {
+            return INSTANCE ?: synchronized(this) {
+                val instance = Room.databaseBuilder(
+                    context.applicationContext,
+                    TransactionDB::class.java,
+                    "transaction_database"
+                )
+                    .fallbackToDestructiveMigration()
+                    .allowMainThreadQueries()
+                    .build()
+                INSTANCE = instance
+                instance
+            }
+        }
+    }
+}
diff --git a/app/src/main/java/com/example/android_hit/room/TransactionDao.kt b/app/src/main/java/com/example/android_hit/room/TransactionDao.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7e74f16576f121152af8cca6d5d76cee08450fb8
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/room/TransactionDao.kt
@@ -0,0 +1,34 @@
+package com.example.android_hit.room
+
+import androidx.room.*
+
+
+@Dao
+interface TransactionDao {
+
+    @Query("SELECT * FROM transaction_table ORDER BY id DESC")
+    fun getAllTransaction() : List<TransactionEntity>
+
+    @Query("SELECT SUM(amount) FROM transaction_table WHERE category = 'Income'")
+    fun getTotalIncome() : Int
+
+    @Query("SELECT SUM(amount) FROM transaction_table WHERE category = 'Expense'")
+    fun getTotalExpense() : Int
+
+    @Query("SELECT * FROM transaction_table WHERE id = :id")
+    fun getId(id: Int) : TransactionEntity
+
+    @Insert
+    fun addTransaction(vararg transactionEntity: TransactionEntity)
+
+    @Update
+    fun updateTransaction(transactionEntity: TransactionEntity)
+
+    @Delete
+    fun deleteTransaction(transactionEntity: TransactionEntity)
+
+    @Query("DELETE FROM transaction_table")
+    fun deleteAll()
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/room/TransactionEntity.kt b/app/src/main/java/com/example/android_hit/room/TransactionEntity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7ece1a50b79e2d6230856e000cdd28deb8cfd39b
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/room/TransactionEntity.kt
@@ -0,0 +1,16 @@
+package com.example.android_hit.room
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "transaction_table")
+class TransactionEntity (
+    @PrimaryKey(autoGenerate = true) var id: Int? = null,
+    @ColumnInfo(name = "title") val title : String,
+    @ColumnInfo(name = "amount") val amount : Int,
+    @ColumnInfo(name = "category") val category : String,
+    @ColumnInfo(name = "location") val location : String,
+    @ColumnInfo(name = "coordinate") val coordinate: String,
+    @ColumnInfo(name = "timestamp") val timestamp: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/utils/Constant.kt b/app/src/main/java/com/example/android_hit/utils/Constant.kt
new file mode 100644
index 0000000000000000000000000000000000000000..821e8dd67a87cda38b8a21454a1a0ebc7397c091
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/utils/Constant.kt
@@ -0,0 +1,8 @@
+package com.example.android_hit.utils
+
+class Constant {
+    companion object{
+        val IS_LOGIN = "PREF_IS_LOGIN"
+        val TOKEN = "TOKEN"
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/utils/CryptoManager.kt b/app/src/main/java/com/example/android_hit/utils/CryptoManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3b7efc4a5965cf99a2d1a26773684bb95933760f
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/utils/CryptoManager.kt
@@ -0,0 +1,84 @@
+package com.example.android_hit.utils
+
+import android.security.keystore.KeyGenParameterSpec
+import android.security.keystore.KeyProperties
+import android.util.Base64
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.nio.charset.StandardCharsets
+import java.security.KeyStore
+import javax.crypto.Cipher
+import javax.crypto.KeyGenerator
+import javax.crypto.SecretKey
+import javax.crypto.spec.IvParameterSpec
+
+class CryptoManager {
+
+    private val keyStore = KeyStore.getInstance("AndroidKeyStore").apply {
+        load(null)
+    }
+    fun encrypt(data: String): String {
+        val key = getKey()
+        val cipher = Cipher.getInstance(TRANSFORMATION)
+        cipher.init(Cipher.ENCRYPT_MODE, key)
+
+        val byteData = data.toByteArray(StandardCharsets.UTF_8)
+        val encryptedData = cipher.doFinal(byteData)
+        val iv = cipher.iv
+
+        // Combine IV and encrypted data for transmission/storage (optional)
+        val combinedData = ByteArrayOutputStream().apply {
+            write(iv)
+            write(encryptedData)
+        }.toByteArray()
+
+        // Encode bytes to Base64 for easier handling (optional)
+        return Base64.encodeToString(combinedData, Base64.NO_WRAP)
+    }
+
+    fun decrypt(data: String): String {
+        val combinedData = Base64.decode(data, Base64.NO_WRAP)
+
+        val inputStream = ByteArrayInputStream(combinedData)
+        val iv = ByteArray(IV_LENGTH)
+        inputStream.read(iv)
+        val encryptedData = inputStream.readBytes()
+
+        val key = getKey()
+        val cipher = Cipher.getInstance(TRANSFORMATION)
+        val ivSpec = IvParameterSpec(iv)
+        cipher.init(Cipher.DECRYPT_MODE, key, ivSpec)
+
+        val decryptedData = cipher.doFinal(encryptedData)
+
+        return String(decryptedData, StandardCharsets.UTF_8)
+    }
+    private fun getKey(): SecretKey {
+        val existingKey = keyStore.getEntry("secret", null) as? KeyStore.SecretKeyEntry
+        return existingKey?.secretKey ?: createKey()
+    }
+
+    private fun createKey(): SecretKey {
+        return KeyGenerator.getInstance(ALGORITHM).apply {
+            init(
+                KeyGenParameterSpec.Builder(
+                    "secret",
+                    KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
+                )
+                    .setBlockModes(BLOCK_MODE)
+                    .setEncryptionPaddings(PADDING)
+                    .setUserAuthenticationRequired(false)
+                    .setRandomizedEncryptionRequired(true)
+                    .build()
+            )
+        }.generateKey()
+    }
+
+    companion object {
+        private const val ALGORITHM = KeyProperties.KEY_ALGORITHM_AES
+        private const val BLOCK_MODE = KeyProperties.BLOCK_MODE_CBC
+        private const val PADDING = KeyProperties.ENCRYPTION_PADDING_PKCS7
+        private const val TRANSFORMATION = "$ALGORITHM/$BLOCK_MODE/$PADDING"
+        private const val IV_LENGTH = 16
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/utils/MyValueFormatter.kt b/app/src/main/java/com/example/android_hit/utils/MyValueFormatter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ed2c96ff1bd883cd8274b6b0afabdfb88df56d02
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/utils/MyValueFormatter.kt
@@ -0,0 +1,17 @@
+package com.example.android_hit.utils
+
+import android.icu.text.DecimalFormat
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+
+class MyValueFormatter : ValueFormatter() {
+    private val mFormat: DecimalFormat
+
+    init {
+        mFormat = DecimalFormat("###,###,##0.0") // use one decimal
+    }
+
+    override fun getFormattedValue(value: Float): String {
+        return mFormat.format(value) + " %" // e.g. append percentage sign
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/utils/TokenManager.kt b/app/src/main/java/com/example/android_hit/utils/TokenManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..461be58aa598d625c4f4d334d0f11ba89955a851
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/utils/TokenManager.kt
@@ -0,0 +1,64 @@
+package com.example.android_hit.utils
+
+import android.content.Context
+import android.content.SharedPreferences
+
+class TokenManager( context: Context) {
+    private val PREF_NAME = "sharedPrefBondoMan"
+    private val sharedPref : SharedPreferences
+    val editor : SharedPreferences.Editor
+
+    init{
+        sharedPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
+        editor = sharedPref.edit()
+    }
+
+    fun putToken(key:String, value:String){
+        editor.putString(key, value).apply()
+    }
+
+    fun getToken(key: String) : String?{
+        return sharedPref.getString(key,null)
+    }
+
+    fun putIsLogin(key: String, value:Boolean){
+        editor.putBoolean(key,value).apply()
+    }
+
+    fun isLogin(key:String):Boolean{
+        return sharedPref.getBoolean(key,false)
+    }
+
+    fun putNIM(key: String, value:String){
+        editor.putString(key, value).apply()
+    }
+
+    fun getNIM(key: String):String?{
+        return sharedPref.getString(key,null)
+    }
+
+    fun putIAT(key: String, value: Int){
+        editor.putInt(key, value).apply()
+    }
+
+    fun getIAT(key: String):Int{
+        return  sharedPref.getInt(key,0)
+    }
+
+    fun putEXP(key: String, value: Int){
+        editor.putInt(key, value).apply()
+    }
+
+    fun getEXP(key: String):Int{
+        return sharedPref.getInt(key,0)
+    }
+
+    fun deleteToken(){
+        editor.clear().apply()
+    }
+
+    fun getToken(): String? {
+
+        return sharedPref.getString("TOKEN", null)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_hit/utils/UserManager.kt b/app/src/main/java/com/example/android_hit/utils/UserManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3808963cc420ded4b27affab20584170ac856dcc
--- /dev/null
+++ b/app/src/main/java/com/example/android_hit/utils/UserManager.kt
@@ -0,0 +1,35 @@
+package com.example.android_hit.utils
+
+import android.content.Context
+import android.content.SharedPreferences
+
+class UserManager( context: Context) {
+    private val PREF_NAME = "sharedPrefUserBondoMan"
+    private val sharedPref : SharedPreferences
+    val editor : SharedPreferences.Editor
+
+    init{
+        sharedPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
+        editor = sharedPref.edit()
+    }
+
+    fun putEmail(key:String, value:String){
+        editor.putString(key, value).apply()
+    }
+
+    fun getEmail(key: String) : String?{
+        return sharedPref.getString(key,null)
+    }
+
+    fun putPassword(key: String, value:String){
+        editor.putString(key, value).apply()
+    }
+
+    fun getPassword(key: String):String?{
+        return sharedPref.getString(key,null)
+    }
+
+    fun deleteUser(){
+        editor.clear().apply()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_gradient_splashscreen.xml b/app/src/main/res/drawable/background_gradient_splashscreen.xml
new file mode 100644
index 0000000000000000000000000000000000000000..223444029fd6dde386a8e568cb49c08ee8956002
--- /dev/null
+++ b/app/src/main/res/drawable/background_gradient_splashscreen.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+    android:type="linear"
+    android:startColor="#B1B8D8"
+    android:centerColor="@color/white"
+    android:endColor="#B1B8D8"
+    android:angle="90"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_rounded_peach.xml b/app/src/main/res/drawable/background_rounded_peach.xml
new file mode 100644
index 0000000000000000000000000000000000000000..632b86457a90abc4e6f0379edd8b07894020daa9
--- /dev/null
+++ b/app/src/main/res/drawable/background_rounded_peach.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="14dp" />
+    <solid android:color="#EFDAC7" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_rounded_purple.xml b/app/src/main/res/drawable/background_rounded_purple.xml
new file mode 100644
index 0000000000000000000000000000000000000000..202fdc493c549f80d5e7cbf66990340a8132b03f
--- /dev/null
+++ b/app/src/main/res/drawable/background_rounded_purple.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="14dp" />
+    <solid android:color="#B1B8D8" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/baseline_add_circle_24.xml b/app/src/main/res/drawable/baseline_add_circle_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c5513e7f6a68e63e805a3ce4f0bbffe2fdd9596
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_add_circle_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_arrow_back_ios_24.xml b/app/src/main/res/drawable/baseline_arrow_back_ios_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7963863026d5cd441f2781123dfce8073a89fe24
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_arrow_back_ios_24.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+    android:tint="#322F50" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M11.67,3.87L9.9,2.1 0,12l9.9,9.9 1.77,-1.77L3.54,12z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_assignment_24.xml b/app/src/main/res/drawable/baseline_assignment_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e48203ee89dca26399b9278c16a2feb9db2e7ec2
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_assignment_24.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+    android:tint="#322F50" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM14,17L7,17v-2h7v2zM17,13L7,13v-2h10v2zM17,9L7,9L7,7h10v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_document_scanner_24.xml b/app/src/main/res/drawable/baseline_document_scanner_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc89fed03a686d5ebcaf10523489bae538043863
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_document_scanner_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M7,3H4v3H2V1h5V3zM22,6V1h-5v2h3v3H22zM7,21H4v-3H2v5h5V21zM20,18v3h-3v2h5v-5H20zM19,18c0,1.1 -0.9,2 -2,2H7c-1.1,0 -2,-0.9 -2,-2V6c0,-1.1 0.9,-2 2,-2h10c1.1,0 2,0.9 2,2V18zM15,8H9v2h6V8zM15,11H9v2h6V11zM15,14H9v2h6V14z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_lock_24.xml b/app/src/main/res/drawable/baseline_lock_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57faa5bcd137c891f39068be9c535775c4a12d32
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_lock_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_mail_outline_24.xml b/app/src/main/res/drawable/baseline_mail_outline_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1209f24816b8ee7f1267186890b9dd21b52eb30
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_mail_outline_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,8l8,5 8,-5v10zM12,11L4,6h16l-8,5z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_photo_camera_24.xml b/app/src/main/res/drawable/baseline_photo_camera_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa207af7b1e59373a0af433ea8fb2ea82ac0ffc8
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_photo_camera_24.xml
@@ -0,0 +1,6 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
+    <path android:fillColor="@android:color/white" android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_pie_chart_24.xml b/app/src/main/res/drawable/baseline_pie_chart_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4d4f0b302aac56cc7af15399db68530509e9a48a
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_pie_chart_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M11,2v20c-5.07,-0.5 -9,-4.79 -9,-10s3.93,-9.5 9,-10zM13.03,2v8.99L22,10.99c-0.47,-4.74 -4.24,-8.52 -8.97,-8.99zM13.03,13.01L13.03,22c4.74,-0.47 8.5,-4.25 8.97,-8.99h-8.97z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_refresh_24.xml b/app/src/main/res/drawable/baseline_refresh_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..70296044e8e9676e7f695acd4af95486a3c14e5b
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_refresh_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_save_alt_24.xml b/app/src/main/res/drawable/baseline_save_alt_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1d7fbfcc0a4c777d3e45ad03f44e54576ce5d6f
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_save_alt_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19,12v7L5,19v-7L3,12v7c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2zM13,12.67l2.59,-2.58L17,11.5l-5,5 -5,-5 1.41,-1.41L11,12.67L11,3h2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/baseline_settings_24.xml b/app/src/main/res/drawable/baseline_settings_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..02da867d396b12cb0dd241951545ff59de210ff3
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_settings_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/>
+</vector>
diff --git a/app/src/main/res/drawable/border_transaction_layout.xml b/app/src/main/res/drawable/border_transaction_layout.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2934ebe3d5e76746d0e1bb11fb130d31851051a5
--- /dev/null
+++ b/app/src/main/res/drawable/border_transaction_layout.xml
@@ -0,0 +1,13 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="1dp"
+    android:color="@color/primary_color_1"/>
+    <corners
+        android:radius="12dp"/>
+    <padding
+        android:left="0dp"
+        android:top="0dp"
+        android:right="0dp"
+        android:bottom="0dp"/> <!-- Padding, sesuaikan dengan kebutuhan -->
+</shape>
diff --git a/app/src/main/res/drawable/camera_icon.xml b/app/src/main/res/drawable/camera_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..badb387c3101d4ba065581398d8931ee7904e9c3
--- /dev/null
+++ b/app/src/main/res/drawable/camera_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/baseline_photo_camera_24" android:state_checked="true"/>
+
+    <item android:drawable="@drawable/outline_photo_camera_24" android:state_checked="false"/>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/expense.xml b/app/src/main/res/drawable/expense.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f6006d1aed7c4e3f07bc6ac61042cb04e6cbc1ca
--- /dev/null
+++ b/app/src/main/res/drawable/expense.xml
@@ -0,0 +1,16 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="34dp"
+    android:height="32dp"
+    android:viewportWidth="34"
+    android:viewportHeight="32">
+  <path
+      android:pathData="M8,0L25.6,0A8,8 0,0 1,33.6 8L33.6,24A8,8 0,0 1,25.6 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
+      android:fillColor="#F0F0F2"/>
+  <group>
+    <clip-path
+        android:pathData="M8,8h17.6v16h-17.6z"/>
+    <path
+        android:pathData="M15.568,11.2L16,10.728V13.6C16,13.812 16.084,14.016 16.234,14.166C16.384,14.316 16.588,14.4 16.8,14.4C17.012,14.4 17.216,14.316 17.366,14.166C17.516,14.016 17.6,13.812 17.6,13.6V10.728L18.032,11.168C18.105,11.25 18.193,11.316 18.293,11.363C18.392,11.409 18.5,11.434 18.609,11.437C18.719,11.44 18.827,11.421 18.929,11.38C19.031,11.339 19.123,11.278 19.2,11.2C19.275,11.125 19.334,11.037 19.375,10.94C19.416,10.842 19.437,10.738 19.437,10.632C19.437,10.526 19.416,10.422 19.375,10.324C19.334,10.227 19.275,10.138 19.2,10.064L17.368,8.232C17.292,8.159 17.202,8.102 17.104,8.064C16.909,7.984 16.691,7.984 16.496,8.064C16.398,8.102 16.308,8.159 16.232,8.232L14.4,10.032C14.245,10.187 14.158,10.397 14.158,10.616C14.158,10.835 14.245,11.045 14.4,11.2C14.555,11.355 14.765,11.442 14.984,11.442C15.203,11.442 15.413,11.355 15.568,11.2ZM16.8,16C16.325,16 15.861,16.141 15.467,16.404C15.072,16.668 14.764,17.043 14.583,17.482C14.401,17.92 14.354,18.403 14.446,18.868C14.539,19.334 14.767,19.761 15.103,20.097C15.439,20.433 15.866,20.661 16.332,20.754C16.797,20.846 17.28,20.799 17.718,20.617C18.157,20.436 18.532,20.128 18.795,19.733C19.059,19.339 19.2,18.875 19.2,18.4C19.2,17.763 18.947,17.153 18.497,16.703C18.047,16.253 17.437,16 16.8,16ZM16.8,19.2C16.642,19.2 16.487,19.153 16.355,19.065C16.224,18.977 16.121,18.852 16.061,18.706C16,18.56 15.984,18.399 16.015,18.244C16.046,18.089 16.122,17.946 16.234,17.834C16.346,17.722 16.489,17.646 16.644,17.615C16.799,17.584 16.96,17.6 17.106,17.661C17.252,17.721 17.377,17.824 17.465,17.955C17.553,18.087 17.6,18.242 17.6,18.4C17.6,18.612 17.516,18.816 17.366,18.966C17.216,19.116 17.012,19.2 16.8,19.2ZM11.2,18.4C11.2,18.558 11.247,18.713 11.335,18.844C11.423,18.976 11.548,19.079 11.694,19.139C11.84,19.2 12.001,19.215 12.156,19.184C12.311,19.154 12.454,19.077 12.566,18.966C12.678,18.854 12.754,18.711 12.785,18.556C12.816,18.401 12.8,18.24 12.739,18.094C12.679,17.948 12.576,17.823 12.444,17.735C12.313,17.647 12.158,17.6 12,17.6C11.788,17.6 11.584,17.684 11.434,17.834C11.284,17.984 11.2,18.188 11.2,18.4ZM22.4,18.4C22.4,18.242 22.353,18.087 22.265,17.955C22.177,17.824 22.052,17.721 21.906,17.661C21.76,17.6 21.599,17.584 21.444,17.615C21.289,17.646 21.146,17.722 21.034,17.834C20.922,17.946 20.846,18.089 20.815,18.244C20.785,18.399 20.8,18.56 20.861,18.706C20.921,18.852 21.024,18.977 21.156,19.065C21.287,19.153 21.442,19.2 21.6,19.2C21.812,19.2 22.016,19.116 22.166,18.966C22.316,18.816 22.4,18.612 22.4,18.4ZM23.2,12.8H20C19.788,12.8 19.584,12.884 19.434,13.034C19.284,13.184 19.2,13.388 19.2,13.6C19.2,13.812 19.284,14.016 19.434,14.166C19.584,14.316 19.788,14.4 20,14.4H23.2C23.412,14.4 23.616,14.484 23.766,14.634C23.916,14.784 24,14.988 24,15.2V21.6C24,21.812 23.916,22.016 23.766,22.166C23.616,22.316 23.412,22.4 23.2,22.4H10.4C10.188,22.4 9.984,22.316 9.834,22.166C9.684,22.016 9.6,21.812 9.6,21.6V15.2C9.6,14.988 9.684,14.784 9.834,14.634C9.984,14.484 10.188,14.4 10.4,14.4H13.6C13.812,14.4 14.016,14.316 14.166,14.166C14.316,14.016 14.4,13.812 14.4,13.6C14.4,13.388 14.316,13.184 14.166,13.034C14.016,12.884 13.812,12.8 13.6,12.8H10.4C9.763,12.8 9.153,13.053 8.703,13.503C8.253,13.953 8,14.563 8,15.2V21.6C8,22.236 8.253,22.847 8.703,23.297C9.153,23.747 9.763,24 10.4,24H23.2C23.837,24 24.447,23.747 24.897,23.297C25.347,22.847 25.6,22.236 25.6,21.6V15.2C25.6,14.563 25.347,13.953 24.897,13.503C24.447,13.053 23.837,12.8 23.2,12.8Z"
+        android:fillColor="#D65C5C"/>
+  </group>
+</vector>
diff --git a/app/src/main/res/drawable/gallery.xml b/app/src/main/res/drawable/gallery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6867b9f0863fa299fbd7d9dc488bb66af644b6a8
--- /dev/null
+++ b/app/src/main/res/drawable/gallery.xml
@@ -0,0 +1,28 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="29dp"
+    android:height="28dp"
+    android:viewportWidth="29"
+    android:viewportHeight="28">
+  <group>
+    <clip-path
+        android:pathData="M0.5,0h28v28h-28z"/>
+    <path
+        android:pathData="M5.167,0.933H23.833C24.823,0.933 25.773,1.327 26.473,2.027C27.173,2.727 27.567,3.677 27.567,4.667V23.333C27.567,24.323 27.173,25.273 26.473,25.973C25.773,26.673 24.823,27.067 23.833,27.067H5.167C4.177,27.067 3.227,26.673 2.527,25.973C1.827,25.273 1.433,24.323 1.433,23.333V4.667C1.433,3.677 1.827,2.727 2.527,2.027C3.227,1.327 4.177,0.933 5.167,0.933Z"
+        android:strokeLineJoin="round"
+        android:strokeWidth="2"
+        android:fillColor="#00000000"
+        android:fillType="evenOdd"
+        android:strokeColor="#322F50"
+        android:strokeLineCap="round"/>
+    <path
+        android:pathData="M27.567,19.6L21.967,14L16.367,19.572M23.833,27.067L7.033,10.267L1.433,15.867"
+        android:strokeLineJoin="round"
+        android:strokeWidth="2"
+        android:fillColor="#00000000"
+        android:strokeColor="#322F50"
+        android:strokeLineCap="round"/>
+    <path
+        android:pathData="M21.033,9.333C22.064,9.333 22.9,8.498 22.9,7.467C22.9,6.436 22.064,5.6 21.033,5.6C20.002,5.6 19.167,6.436 19.167,7.467C19.167,8.498 20.002,9.333 21.033,9.333Z"
+        android:fillColor="#322F50"/>
+  </group>
+</vector>
diff --git a/app/src/main/res/drawable/graphs_icon.xml b/app/src/main/res/drawable/graphs_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a8ad2f4a95d930fd2d55733589abe6063e52bc3
--- /dev/null
+++ b/app/src/main/res/drawable/graphs_icon.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/baseline_pie_chart_24" android:state_checked="true"/>
+
+    <item android:drawable="@drawable/outline_pie_chart_24" android:state_checked="false"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/icon_awal.png b/app/src/main/res/drawable/icon_awal.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1d2c528d513eeadf22b83b1c768e87cabd373e4
Binary files /dev/null and b/app/src/main/res/drawable/icon_awal.png differ
diff --git a/app/src/main/res/drawable/icon_login.png b/app/src/main/res/drawable/icon_login.png
new file mode 100644
index 0000000000000000000000000000000000000000..b768fa86ff60b4331f9b956974aadd36b1d8f9c7
Binary files /dev/null and b/app/src/main/res/drawable/icon_login.png differ
diff --git a/app/src/main/res/drawable/income.xml b/app/src/main/res/drawable/income.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0c16157d20b3c556b8127b07b145407209e90404
--- /dev/null
+++ b/app/src/main/res/drawable/income.xml
@@ -0,0 +1,8 @@
+<vector
+    android:width="34dp"
+    android:height="32dp"
+    android:viewportWidth="34"
+    android:viewportHeight="32" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#F0F0F2" android:pathData="M8,0L25.6,0A8,8 0,0 1,33.6 8L33.6,24A8,8 0,0 1,25.6 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"/>
+    <path android:fillColor="#2DA039" android:pathData="M16.8,16C16.325,16 15.861,16.141 15.467,16.404C15.072,16.668 14.764,17.043 14.583,17.482C14.401,17.92 14.354,18.403 14.446,18.868C14.539,19.334 14.767,19.761 15.103,20.097C15.439,20.433 15.866,20.661 16.332,20.754C16.797,20.847 17.28,20.799 17.718,20.617C18.157,20.436 18.532,20.128 18.795,19.733C19.059,19.339 19.2,18.875 19.2,18.4C19.2,17.764 18.947,17.153 18.497,16.703C18.047,16.253 17.437,16 16.8,16ZM16.8,19.2C16.642,19.2 16.487,19.153 16.355,19.065C16.224,18.977 16.121,18.852 16.061,18.706C16,18.56 15.984,18.399 16.015,18.244C16.046,18.089 16.122,17.946 16.234,17.834C16.346,17.722 16.489,17.646 16.644,17.615C16.799,17.584 16.96,17.6 17.106,17.661C17.252,17.721 17.377,17.824 17.465,17.955C17.553,18.087 17.6,18.242 17.6,18.4C17.6,18.612 17.516,18.816 17.366,18.966C17.216,19.116 17.012,19.2 16.8,19.2ZM16.232,14.168C16.308,14.241 16.398,14.298 16.496,14.336C16.592,14.378 16.695,14.4 16.8,14.4C16.905,14.4 17.008,14.378 17.104,14.336C17.202,14.298 17.292,14.241 17.368,14.168L19.2,12.368C19.355,12.213 19.442,12.003 19.442,11.784C19.442,11.565 19.355,11.355 19.2,11.2C19.045,11.045 18.835,10.958 18.616,10.958C18.397,10.958 18.187,11.045 18.032,11.2L17.6,11.672V8.8C17.6,8.588 17.516,8.384 17.366,8.234C17.216,8.084 17.012,8 16.8,8C16.588,8 16.384,8.084 16.234,8.234C16.084,8.384 16,8.588 16,8.8V11.672L15.568,11.2C15.413,11.045 15.203,10.958 14.984,10.958C14.765,10.958 14.555,11.045 14.4,11.2C14.245,11.355 14.158,11.565 14.158,11.784C14.158,12.003 14.245,12.213 14.4,12.368L16.232,14.168ZM22.4,18.4C22.4,18.242 22.353,18.087 22.265,17.955C22.177,17.824 22.052,17.721 21.906,17.661C21.76,17.6 21.599,17.584 21.444,17.615C21.289,17.646 21.146,17.722 21.034,17.834C20.922,17.946 20.846,18.089 20.815,18.244C20.785,18.399 20.8,18.56 20.861,18.706C20.921,18.852 21.024,18.977 21.156,19.065C21.287,19.153 21.442,19.2 21.6,19.2C21.812,19.2 22.016,19.116 22.166,18.966C22.316,18.816 22.4,18.612 22.4,18.4ZM23.2,12.8H20.8C20.588,12.8 20.384,12.884 20.234,13.034C20.084,13.184 20,13.388 20,13.6C20,13.812 20.084,14.016 20.234,14.166C20.384,14.316 20.588,14.4 20.8,14.4H23.2C23.412,14.4 23.616,14.484 23.766,14.634C23.916,14.784 24,14.988 24,15.2V21.6C24,21.812 23.916,22.016 23.766,22.166C23.616,22.316 23.412,22.4 23.2,22.4H10.4C10.188,22.4 9.984,22.316 9.834,22.166C9.684,22.016 9.6,21.812 9.6,21.6V15.2C9.6,14.988 9.684,14.784 9.834,14.634C9.984,14.484 10.188,14.4 10.4,14.4H12.8C13.012,14.4 13.216,14.316 13.366,14.166C13.516,14.016 13.6,13.812 13.6,13.6C13.6,13.388 13.516,13.184 13.366,13.034C13.216,12.884 13.012,12.8 12.8,12.8H10.4C9.763,12.8 9.153,13.053 8.703,13.503C8.253,13.953 8,14.564 8,15.2V21.6C8,22.236 8.253,22.847 8.703,23.297C9.153,23.747 9.763,24 10.4,24H23.2C23.837,24 24.447,23.747 24.897,23.297C25.347,22.847 25.6,22.236 25.6,21.6V15.2C25.6,14.564 25.347,13.953 24.897,13.503C24.447,13.053 23.837,12.8 23.2,12.8ZM11.2,18.4C11.2,18.558 11.247,18.713 11.335,18.844C11.423,18.976 11.548,19.079 11.694,19.139C11.84,19.2 12.001,19.215 12.156,19.185C12.311,19.154 12.454,19.078 12.566,18.966C12.678,18.854 12.754,18.711 12.785,18.556C12.816,18.401 12.8,18.24 12.739,18.094C12.679,17.948 12.576,17.823 12.444,17.735C12.313,17.647 12.158,17.6 12,17.6C11.788,17.6 11.584,17.684 11.434,17.834C11.284,17.984 11.2,18.188 11.2,18.4Z"/>
+</vector>
diff --git a/app/src/main/res/drawable/iv_network_check.xml b/app/src/main/res/drawable/iv_network_check.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dab031b17951ddffb35e3f5d8d90bb9e2b81dcde
--- /dev/null
+++ b/app/src/main/res/drawable/iv_network_check.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M15.9,5c-0.17,0 -0.32,0.09 -0.41,0.23l-0.07,0.15 -5.18,11.65c-0.16,0.29 -0.26,0.61 -0.26,0.96 0,1.11 0.9,2.01 2.01,2.01 0.96,0 1.77,-0.68 1.96,-1.59l0.01,-0.03L16.4,5.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM1,9l2,2c2.88,-2.88 6.79,-4.08 10.53,-3.62l1.19,-2.68C9.89,3.84 4.74,5.27 1,9zM21,11l2,-2c-1.64,-1.64 -3.55,-2.82 -5.59,-3.57l-0.53,2.82c1.5,0.62 2.9,1.53 4.12,2.75zM17,15l2,-2c-0.8,-0.8 -1.7,-1.42 -2.66,-1.89l-0.55,2.92c0.42,0.27 0.83,0.59 1.21,0.97zM5,13l2,2c1.13,-1.13 2.56,-1.79 4.03,-2l1.28,-2.88c-2.63,-0.08 -5.3,0.87 -7.31,2.88z"/>
+</vector>
diff --git a/app/src/main/res/drawable/iv_picture.xml b/app/src/main/res/drawable/iv_picture.xml
new file mode 100644
index 0000000000000000000000000000000000000000..128c4ec1c0ff536f5cdf295d26d928ab0c458f10
--- /dev/null
+++ b/app/src/main/res/drawable/iv_picture.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="20dp" />
+    <stroke
+        android:width="2dp"
+        android:color="#000000" />
+</shape>
diff --git a/app/src/main/res/drawable/login_backgroud2.xml b/app/src/main/res/drawable/login_backgroud2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d1992457db7659499441f8b9ca7f47769f490fe
--- /dev/null
+++ b/app/src/main/res/drawable/login_backgroud2.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:type="linear"
+        android:angle="270"
+        android:startColor="#B1B8D8"
+        android:endColor="@color/white"
+        android:gradientRadius="25%"/>
+
+
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/login_background.xml b/app/src/main/res/drawable/login_background.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7298f1f647b91f3dc732a7a95bdb08285fd70a64
--- /dev/null
+++ b/app/src/main/res/drawable/login_background.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:type="linear"
+        android:angle="90"
+        android:startColor="#B1B8D8"
+        android:gradientRadius="25%"/>
+
+
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/logo_bondoman.png b/app/src/main/res/drawable/logo_bondoman.png
new file mode 100644
index 0000000000000000000000000000000000000000..3683cc6401ba46bc7fb50ae3a3df9e7825287cd0
Binary files /dev/null and b/app/src/main/res/drawable/logo_bondoman.png differ
diff --git a/app/src/main/res/drawable/nav_item_color_selected.xml b/app/src/main/res/drawable/nav_item_color_selected.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b8eb538d9aad0b1082cf63f5303a2b2f4e52f8c
--- /dev/null
+++ b/app/src/main/res/drawable/nav_item_color_selected.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="#322F50" android:state_checked="true"/>
+    <item android:color="#322F50" android:state_checked="false"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/outline_assignment_24.xml b/app/src/main/res/drawable/outline_assignment_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c589c2db4ddb5b87c13d51868cc16debb18efc51
--- /dev/null
+++ b/app/src/main/res/drawable/outline_assignment_24.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+    android:tint="#322F50" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M7,15h7v2L7,17zM7,11h10v2L7,13zM7,7h10v2L7,9zM19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-0.14,0 -0.27,0.01 -0.4,0.04 -0.39,0.08 -0.74,0.28 -1.01,0.55 -0.18,0.18 -0.33,0.4 -0.43,0.64 -0.1,0.23 -0.16,0.49 -0.16,0.77v14c0,0.27 0.06,0.54 0.16,0.78s0.25,0.45 0.43,0.64c0.27,0.27 0.62,0.47 1.01,0.55 0.13,0.02 0.26,0.03 0.4,0.03h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,2.75c0.41,0 0.75,0.34 0.75,0.75s-0.34,0.75 -0.75,0.75 -0.75,-0.34 -0.75,-0.75 0.34,-0.75 0.75,-0.75zM19,19L5,19L5,5h14v14z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_delete_24.xml b/app/src/main/res/drawable/outline_delete_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..316ac365cf8d41a12f8a9a91ab5c95ae73e1d86f
--- /dev/null
+++ b/app/src/main/res/drawable/outline_delete_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#D65C5C"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M16,9v10H8V9h8m-1.5,-6h-5l-1,1H5v2h14V4h-3.5l-1,-1zM18,7H6v12c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_document_scanner_24.xml b/app/src/main/res/drawable/outline_document_scanner_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce0448472fe6f603da9053eb2601bc7e299e6bf6
--- /dev/null
+++ b/app/src/main/res/drawable/outline_document_scanner_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M7,3H4v3H2V1h5V3zM22,6V1h-5v2h3v3H22zM7,21H4v-3H2v5h5V21zM20,18v3h-3v2h5v-5H20zM17,6H7v12h10V6zM19,18c0,1.1 -0.9,2 -2,2H7c-1.1,0 -2,-0.9 -2,-2V6c0,-1.1 0.9,-2 2,-2h10c1.1,0 2,0.9 2,2V18zM15,8H9v2h6V8zM15,11H9v2h6V11zM15,14H9v2h6V14z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_edit_note_24.xml b/app/src/main/res/drawable/outline_edit_note_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae11337d2e4719f51cca2b3765c030416a91b2ad
--- /dev/null
+++ b/app/src/main/res/drawable/outline_edit_note_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M3,10h11v2H3V10zM3,8h11V6H3V8zM3,16h7v-2H3V16zM18.01,12.87l0.71,-0.71c0.39,-0.39 1.02,-0.39 1.41,0l0.71,0.71c0.39,0.39 0.39,1.02 0,1.41l-0.71,0.71L18.01,12.87zM17.3,13.58l-5.3,5.3V21h2.12l5.3,-5.3L17.3,13.58z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_location_on_24.xml b/app/src/main/res/drawable/outline_location_on_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..92dc0de4eaae27628418b23a44e0f15962828086
--- /dev/null
+++ b/app/src/main/res/drawable/outline_location_on_24.xml
@@ -0,0 +1,6 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z"/>
+    <path android:fillColor="@android:color/white" android:pathData="M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_photo_camera_24.xml b/app/src/main/res/drawable/outline_photo_camera_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..76dbfe93b4aa500b4754e68fd3260aabcc4506a3
--- /dev/null
+++ b/app/src/main/res/drawable/outline_photo_camera_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M14.12,4l1.83,2L20,6v12L4,18L4,6h4.05l1.83,-2h4.24M15,2L9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2zM12,9c1.65,0 3,1.35 3,3s-1.35,3 -3,3 -3,-1.35 -3,-3 1.35,-3 3,-3m0,-2c-2.76,0 -5,2.24 -5,5s2.24,5 5,5 5,-2.24 5,-5 -2.24,-5 -5,-5z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_pie_chart_24.xml b/app/src/main/res/drawable/outline_pie_chart_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..979da608200550b4c12d0fbb961667270061d2cf
--- /dev/null
+++ b/app/src/main/res/drawable/outline_pie_chart_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM19.93,11L13,11L13,4.07c3.61,0.45 6.48,3.32 6.93,6.93zM4,12c0,-4.07 3.06,-7.44 7,-7.93v15.86c-3.94,-0.49 -7,-3.86 -7,-7.93zM13,19.93L13,13h6.93c-0.45,3.61 -3.32,6.48 -6.93,6.93z"/>
+</vector>
diff --git a/app/src/main/res/drawable/outline_settings_24.xml b/app/src/main/res/drawable/outline_settings_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9ec0a232d268d6905621084983dd2a120efc0507
--- /dev/null
+++ b/app/src/main/res/drawable/outline_settings_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#322F50"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98 0,-0.34 -0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.09,-0.16 -0.26,-0.25 -0.44,-0.25 -0.06,0 -0.12,0.01 -0.17,0.03l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.06,-0.02 -0.12,-0.03 -0.18,-0.03 -0.17,0 -0.34,0.09 -0.43,0.25l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98 0,0.33 0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.09,0.16 0.26,0.25 0.44,0.25 0.06,0 0.12,-0.01 0.17,-0.03l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.06,0.02 0.12,0.03 0.18,0.03 0.17,0 0.34,-0.09 0.43,-0.25l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM17.45,11.27c0.04,0.31 0.05,0.52 0.05,0.73 0,0.21 -0.02,0.43 -0.05,0.73l-0.14,1.13 0.89,0.7 1.08,0.84 -0.7,1.21 -1.27,-0.51 -1.04,-0.42 -0.9,0.68c-0.43,0.32 -0.84,0.56 -1.25,0.73l-1.06,0.43 -0.16,1.13 -0.2,1.35h-1.4l-0.19,-1.35 -0.16,-1.13 -1.06,-0.43c-0.43,-0.18 -0.83,-0.41 -1.23,-0.71l-0.91,-0.7 -1.06,0.43 -1.27,0.51 -0.7,-1.21 1.08,-0.84 0.89,-0.7 -0.14,-1.13c-0.03,-0.31 -0.05,-0.54 -0.05,-0.74s0.02,-0.43 0.05,-0.73l0.14,-1.13 -0.89,-0.7 -1.08,-0.84 0.7,-1.21 1.27,0.51 1.04,0.42 0.9,-0.68c0.43,-0.32 0.84,-0.56 1.25,-0.73l1.06,-0.43 0.16,-1.13 0.2,-1.35h1.39l0.19,1.35 0.16,1.13 1.06,0.43c0.43,0.18 0.83,0.41 1.23,0.71l0.91,0.7 1.06,-0.43 1.27,-0.51 0.7,1.21 -1.07,0.85 -0.89,0.7 0.14,1.13zM12,8c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/profile_icon.xml b/app/src/main/res/drawable/profile_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8de3cf5917e5f22a528a954769cba1f81d2cdfab
--- /dev/null
+++ b/app/src/main/res/drawable/profile_icon.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="100dp"
+    android:height="100dp"
+    android:viewportWidth="100"
+    android:viewportHeight="100">
+
+    <path
+        android:fillColor="#EFDAC7"
+        android:pathData="M 50 0 C 77.6142374915 0 100 22.3857625085 100 50 C 100 77.6142374915 77.6142374915 100 50 100 C 22.3857625085 100 0 77.6142374915 0 50 C 0 22.3857625085 22.3857625085 0 50 0 Z" />
+    <path
+        android:fillColor="#322F50"
+        android:pathData="M11.8094 80.9644C12.0889 81.0374 12.3859 80.9971 12.6359 80.8521C12.8859 80.7071 13.0688 80.4692 13.145 80.19C15.3928 71.7824 24.5279 69.6034 29.988 68.2995C31.3563 67.9735 32.4366 67.7154 33.1392 67.4113C39.3588 64.705 41.3862 60.3514 41.9928 57.1748C42.0289 56.9858 42.0146 56.7906 41.9514 56.6089C41.8882 56.4272 41.7783 56.2655 41.6328 56.14C38.3942 53.3375 35.662 49.1304 33.938 44.2911C33.8893 44.1523 33.8128 44.025 33.7132 43.917C31.4327 41.4317 30.1233 38.8042 30.1233 36.7105C30.1233 35.4876 30.5838 34.6671 31.6204 34.048C31.7756 33.955 31.9054 33.8247 31.998 33.6688C32.0905 33.513 32.143 33.3366 32.1507 33.1554C32.633 22.011 40.5503 13.2381 50.2616 13.1812L50.4951 13.1965C60.2543 13.3321 68.1215 22.2932 68.403 33.5951C68.407 33.7496 68.4436 33.9015 68.5106 34.0407C68.5776 34.1799 68.6733 34.3032 68.7915 34.4024C69.4745 34.9822 69.7932 35.7173 69.7932 36.7149C69.7932 38.4673 68.8613 40.6222 67.1722 42.7793C67.0917 42.8831 67.0297 43.0001 66.9889 43.125C65.2431 48.6732 62.1093 53.5715 58.395 56.5688C58.2411 56.6933 58.1238 56.8574 58.0554 57.0434C57.987 57.2294 57.9701 57.4306 58.0066 57.6255C58.6132 60.7999 60.6406 65.1513 66.8602 67.862C67.5956 68.1814 68.7369 68.4308 70.1838 68.7436C75.5894 69.9163 84.635 71.8831 86.8544 80.19C86.8916 80.3287 86.9558 80.4588 87.0432 80.5727C87.1306 80.6866 87.2395 80.7822 87.3637 80.8539C87.4879 80.9256 87.625 80.9721 87.7672 80.9907C87.9093 81.0092 88.0537 80.9996 88.1921 80.9622C88.3306 80.9249 88.4603 80.8606 88.5739 80.773C88.6875 80.6854 88.7828 80.5762 88.8544 80.4517C88.9259 80.3271 88.9723 80.1897 88.9908 80.0472C89.0094 79.9047 88.9997 79.7599 88.9625 79.6212C86.3983 70.0235 76.1502 67.7985 70.6464 66.604C69.3698 66.3262 68.2677 66.0877 67.7309 65.8514C63.6718 64.0837 61.1709 61.3906 60.2871 57.8333C64.0559 54.5889 67.2093 49.5833 69.0119 43.9695C70.9258 41.4754 71.9776 38.907 71.9776 36.7127C71.9776 35.2491 71.5063 34.0283 70.5722 33.0745C70.0529 20.8143 61.3258 11.1597 50.4951 11.0044L50.1699 11C39.5356 11.0569 30.7715 20.4577 30.0055 32.5056C28.6393 33.512 27.9454 34.9231 27.9454 36.7149C27.9454 39.303 29.4053 42.3987 31.9608 45.2384C33.7263 50.1018 36.4629 54.3745 39.7211 57.3651C38.8416 60.9355 36.3385 63.6374 32.2707 65.4073C31.7448 65.637 30.6973 65.8886 29.4839 66.1774C23.9387 67.4988 13.6208 69.96 11.0369 79.6255C10.9623 79.9058 11.0018 80.2043 11.1466 80.4554C11.2915 80.7064 11.5299 80.8895 11.8094 80.9644Z" />
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_background.xml b/app/src/main/res/drawable/rounded_background.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b421cb7079fbe889d34558310c09024c5efe192f
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_background.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="12dp" />
+    <solid android:color="@color/secondary_color_2" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_background_gradient.xml b/app/src/main/res/drawable/rounded_background_gradient.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e73f03d5f0e7cf85d89803a5c3a031f8f4fdcdea
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_background_gradient.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <gradient
+        android:type="linear"
+        android:angle="270"
+        android:startColor="#B1B8D8"
+        android:endColor="@color/white"
+        android:gradientRadius="50%"/>
+    <corners
+        android:topLeftRadius="30dp"
+        android:topRightRadius="30dp"/>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_background_transparent.xml b/app/src/main/res/drawable/rounded_background_transparent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf186f8567cc0e3d37d05498448c7994431d0ce6
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_background_transparent.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@android:color/transparent" />
+    <corners android:radius="8dp" />
+    <stroke android:width="1dip" android:color="@color/primary1"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_button.xml b/app/src/main/res/drawable/rounded_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..487e3fe3282a180b3343bfee19267f8c1d4feda8
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_button.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item>
+        <shape android:shape="oval">
+            <corners android:radius="8dp" />
+            <solid android:color="#B1B8D8" />
+            <stroke android:width="5dp" android:color="#494666" />
+        </shape>
+    </item>
+</selector>
diff --git a/app/src/main/res/drawable/rounded_corne.xml b/app/src/main/res/drawable/rounded_corne.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6bc2b283c38e08b88152bd79291da17aa6ddfe1b
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_corne.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="10dp"/>
+    <stroke android:width="1dip" android:color="@color/primary1"/>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_expense.xml b/app/src/main/res/drawable/rounded_expense.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ad207cee894189e002ee2078238f857ffdd76197
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_expense.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="12dp" />
+    <solid android:color="@color/primary_color_3" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_income.xml b/app/src/main/res/drawable/rounded_income.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e8014a563095fdf4c2463583c0a261cfa52234bc
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_income.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="12dp" />
+    <solid android:color="@color/primary_color_2" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/scan_icon.xml b/app/src/main/res/drawable/scan_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..825b4f4b62d1ed02762ecf791b2c467371954650
--- /dev/null
+++ b/app/src/main/res/drawable/scan_icon.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/baseline_document_scanner_24" android:state_checked="true"/>
+
+    <item android:drawable="@drawable/outline_document_scanner_24" android:state_checked="false"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/settings_icon.xml b/app/src/main/res/drawable/settings_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2088cda029bb45270ba7a26e05d3431ee4683ad9
--- /dev/null
+++ b/app/src/main/res/drawable/settings_icon.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/baseline_settings_24" android:state_checked="true"/>
+
+    <item android:drawable="@drawable/outline_settings_24" android:state_checked="false"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/splashscreen.png b/app/src/main/res/drawable/splashscreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..52af1a41865973c2dcdaa3bf056415b37837f1ab
Binary files /dev/null and b/app/src/main/res/drawable/splashscreen.png differ
diff --git a/app/src/main/res/drawable/square_background_gradient_down.xml b/app/src/main/res/drawable/square_background_gradient_down.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0d8cf28f64f14de6df6482f60af4d1142d990b3
--- /dev/null
+++ b/app/src/main/res/drawable/square_background_gradient_down.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <gradient
+        android:type="linear"
+        android:angle="270"
+        android:startColor="#B1B8D8"
+        android:endColor="@color/white"/>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/square_background_gradient_up.xml b/app/src/main/res/drawable/square_background_gradient_up.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4139b8f35c9f7a7b476c178386bde3b72d6253e1
--- /dev/null
+++ b/app/src/main/res/drawable/square_background_gradient_up.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <gradient
+        android:type="linear"
+        android:angle="90"
+        android:startColor="#B1B8D8"
+        android:endColor="@color/white"/>>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/transaction_icon.xml b/app/src/main/res/drawable/transaction_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d5fc5579d2e577f19387431dc55f3eba888b1dc5
--- /dev/null
+++ b/app/src/main/res/drawable/transaction_icon.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/baseline_assignment_24" android:state_checked="true"/>
+
+    <item android:drawable="@drawable/outline_assignment_24" android:state_checked="false"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/twibbon_frame.png b/app/src/main/res/drawable/twibbon_frame.png
new file mode 100644
index 0000000000000000000000000000000000000000..74b375320c3899855d1f46600933ba876bb6b955
Binary files /dev/null and b/app/src/main/res/drawable/twibbon_frame.png differ
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1df0abc90ac3f2ce99705583c987bf4f2752ef8
--- /dev/null
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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"
+    android:background="@color/primary_color_4"
+    tools:context=".MainActivity">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        >
+
+        <com.google.android.material.navigationrail.NavigationRailView
+            android:id="@+id/navigation_view"
+            android:paddingTop="12dp"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:background="@color/secondary_color_2"
+            app:itemBackground="@color/secondary_color_2"
+            app:itemIconTint="@drawable/nav_item_color_selected"
+            app:itemTextColor="@color/primary_color_1"
+            app:labelVisibilityMode="labeled"
+            app:itemPaddingBottom="12dp"
+            app:menu="@menu/side_nav_menu" />
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+
+            <FrameLayout
+                android:id="@+id/header_layout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <FrameLayout
+                android:id="@+id/frame_layout"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"/>
+        </LinearLayout>
+
+    </LinearLayout>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_detail_transaction.xml b/app/src/main/res/layout-land/fragment_detail_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9bed128a3bcfbbe8e9452dbc3a2730297114f2de
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_detail_transaction.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".DetailTransaction">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginBottom="16dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dp"
+                android:text="Title"
+                android:textColor="@color/primary_color_1"
+                android:textSize="16sp" />
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <EditText
+                    android:id="@+id/inputTitle"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="textPersonName"
+                    android:padding="12dp" />
+            </com.google.android.material.textfield.TextInputLayout>
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dp"
+                android:text="How Much?"
+                android:textColor="@color/primary_color_1"
+                android:textSize="16sp" />
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <EditText
+                    android:id="@+id/inputAmount"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="textPersonName"
+                    android:padding="8dp"
+                    android:textSize="36sp" />
+            </com.google.android.material.textfield.TextInputLayout>
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dp"
+                android:text="Category"
+                android:textColor="@color/primary_color_1"
+                android:textSize="16sp" />
+
+            <RadioGroup
+                android:id="@+id/radioGroupCategory"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:orientation="horizontal">
+
+                <RadioButton
+                    android:id="@+id/radioIncome"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginRight="24dp"
+                    android:text="Income"
+                    android:textSize="24sp"
+                    android:textColor="@color/primary_color_1"/>
+
+                <RadioButton
+                    android:id="@+id/radioExpense"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="24dp"
+                    android:text="Expense"
+                    android:textSize="24sp"
+                    android:textColor="@color/primary_color_1"/>
+            </RadioGroup>
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dp"
+                android:text="Location"
+                android:textColor="@color/primary_color_1"
+                android:textSize="16sp" />
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <EditText
+                    android:id="@+id/inputLocation"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:padding="12dp" />
+            </com.google.android.material.textfield.TextInputLayout>
+
+            <Button
+                android:id="@+id/buttonSave"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginTop="48dp"
+                android:backgroundTint="@color/primary_color_1"
+                android:text="Save"
+                android:textColor="@color/white" />
+
+        </LinearLayout>
+
+    </ScrollView>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_graphs.xml b/app/src/main/res/layout-land/fragment_graphs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1536bad50100b323228d9259f2b0f3fd383923fa
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_graphs.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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=".Graphs">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal">
+
+        <LinearLayout
+            android:id="@+id/graph_container"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:layout_marginHorizontal="12dp"
+            android:layout_marginBottom="8dp">
+
+            <com.github.mikephil.charting.charts.PieChart
+                android:id="@+id/pie_chart"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+            </com.github.mikephil.charting.charts.PieChart>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/constraintLayout"
+            android:layout_width="200dp"
+            android:layout_height="match_parent"
+            android:orientation="vertical"
+            android:gravity="center"
+            android:layout_marginRight="12dp"
+            >
+
+            <LinearLayout
+                android:id="@+id/containerIncome"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/background_rounded_purple"
+                android:paddingVertical="12dp"
+                android:paddingHorizontal="12dp"
+                android:layout_marginBottom="40dp"
+                >
+
+                <ImageView
+                    android:id="@+id/incomeIcon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="4dp"
+                    android:src="@drawable/income"
+                    android:layout_gravity="center_vertical"
+                    />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/incomeText"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="8dp"
+                        android:text="Income"
+                        android:textSize="16sp"/>
+
+                    <TextView
+                        android:id="@+id/incomeValueText"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="8dp"
+                        android:text="Rp"
+                        android:textSize="16sp"
+                        android:textStyle="bold"/>
+                </LinearLayout>
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/containerExpense"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/background_rounded_peach"
+                android:paddingVertical="12dp"
+                android:paddingHorizontal="12dp"
+                >
+
+                <ImageView
+                    android:id="@+id/expenseIcon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:src="@drawable/expense"
+                    android:layout_marginStart="4dp"
+                    android:layout_gravity="center_vertical"
+                    />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/expenseText"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="8dp"
+                        android:text="Expense"
+                        android:textSize="16sp"/>
+
+                    <TextView
+                        android:id="@+id/expenseValueText"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="8dp"
+                        android:text="Rp"
+                        android:textSize="16sp"
+                        android:textStyle="bold"/>
+                </LinearLayout>
+
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+
+    </LinearLayout>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_scan.xml b/app/src/main/res/layout-land/fragment_scan.xml
new file mode 100644
index 0000000000000000000000000000000000000000..550ff95d124acf0af793593cf619bb62824f9a27
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_scan.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".Scan">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal">
+
+        <ImageView
+            android:id="@+id/captureImageView"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:background="@drawable/iv_picture"
+            android:scaleType="centerCrop"
+            android:layout_marginHorizontal="12dp"
+            android:layout_marginBottom="12dp"/>
+
+        <FrameLayout
+            android:layout_width="120dp"
+            android:layout_height="match_parent">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center">
+
+                <android.widget.Button
+                    android:id="@+id/captureImgBtn"
+                    android:layout_width="69dp"
+                    android:layout_height="71dp"
+                    android:background="@drawable/rounded_button"
+                    android:text="" />
+
+            </LinearLayout>
+
+            <Button
+                android:id="@+id/pickImgBtn"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal|bottom"
+                android:layout_marginBottom="12dp"
+                android:background="@android:color/transparent"
+                android:drawableTop="@drawable/gallery"
+                android:text="Gallery"
+                android:textColor="@color/primary_color_1" />
+
+
+        </FrameLayout>
+
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_settings.xml b/app/src/main/res/layout-land/fragment_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..65af9cafccf0f2e866469a2827ef12e69769bd8c
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_settings.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".Settings">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginHorizontal="16dp"
+        android:background="@drawable/rounded_background_gradient"
+        android:orientation="horizontal"
+        android:padding="16dp"
+        android:gravity="center">
+
+        <LinearLayout
+            android:layout_width="240dp"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <ImageView
+                android:id="@+id/iv_settings"
+                android:layout_width="140dp"
+                android:layout_height="140dp"
+                android:layout_centerInParent="true"
+                android:layout_marginTop="20dp"
+                android:src="@drawable/profile_icon" />
+
+            <TextView
+                android:id="@+id/emailTextView"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginVertical="16dp"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="123@gmail.com"
+                android:textColor="@color/primary1"
+                android:textAlignment="center"/>
+        </LinearLayout>
+
+
+        <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:gravity="center">
+
+                <Button
+                    android:id="@+id/saveTransactionButton"
+                    android:layout_marginHorizontal="16dp"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/rounded_background_transparent"
+                    android:text="Save Transaction List"
+                    android:layout_marginVertical="10dp"
+                    android:textColor="@color/primary1" />
+
+                <Button
+                    android:id="@+id/sendTransactionButton"
+                    android:layout_marginHorizontal="16dp"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/rounded_background_transparent"
+                    android:text="Send Transaction List"
+                    android:layout_marginVertical="10dp"
+                    android:textColor="@color/primary1" />
+
+                <Button
+                    android:id="@+id/randomizeTransactionButton"
+                    android:layout_marginHorizontal="16dp"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/rounded_background_transparent"
+                    android:text="Randomize"
+                    android:layout_marginVertical="10dp"
+                    android:textColor="@color/primary1" />
+
+                <Button
+                    android:id="@+id/logoutButton"
+                    android:layout_marginHorizontal="16dp"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:drawableStart="@drawable/ic_launcher_foreground"
+                    android:background="@drawable/rounded_background_transparent"
+                    android:text="Logout"
+                    android:layout_marginVertical="10dp"
+                    android:textColor="@color/primary1" />
+
+            </LinearLayout>
+        </ScrollView>
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_transaction.xml b/app/src/main/res/layout-land/fragment_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef8b5a5b559d95cfe047a58fa7fe1176cb4a7e16
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_transaction.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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=".Transaction">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="8dp">
+
+        <LinearLayout
+            android:id="@+id/expense_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:layout_marginHorizontal="16dp">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/rounded_income"
+                    android:padding="16dp"
+                    android:orientation="horizontal"
+                    android:layout_marginRight="8dp">
+
+                    <ImageView
+                        android:layout_width="32dp"
+                        android:layout_height="32dp"
+                        android:src="@drawable/income"
+                        android:scaleType="fitCenter"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginRight="12dp"
+                        />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="Income"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="normal"
+                            android:textSize="16dp"
+                            />
+
+                        <TextView
+                            android:id="@+id/amount_income"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="bold"
+                            android:textSize="16dp"
+                            />
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/rounded_expense"
+                    android:padding="16dp"
+                    android:orientation="horizontal"
+                    android:layout_marginLeft="8dp">
+
+                    <ImageView
+                        android:layout_width="32dp"
+                        android:layout_height="32dp"
+                        android:src="@drawable/expense"
+                        android:scaleType="fitCenter"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginRight="12dp"
+                        />
+
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="Expense"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="normal"
+                            android:textSize="16dp"
+                            />
+
+                        <TextView
+                            android:id="@+id/amount_expense"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="bold"
+                            android:textSize="16dp"
+                            />
+                    </LinearLayout>
+                </LinearLayout>
+            </LinearLayout>
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Recently Transaction"
+                android:textSize="20dp"
+                android:textStyle="bold"
+                android:layout_marginTop="16dp"
+                android:textColor="@color/primary_color_1"/>
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/rvTransaction"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingBottom="48dp">
+            </androidx.recyclerview.widget.RecyclerView>
+        </LinearLayout>
+    </ScrollView>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/fabAdd"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentEnd="true"
+        app:srcCompat="@drawable/baseline_add_circle_24"
+        app:backgroundTint="@android:color/transparent"
+        app:fabSize="auto"
+        app:maxImageSize="60dp"
+        app:elevation="0dp"
+        app:layout_anchorGravity="bottom|end"/>
+
+</RelativeLayout>
diff --git a/app/src/main/res/layout-land/fragment_twibbon.xml b/app/src/main/res/layout-land/fragment_twibbon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..723cced1c5ab4383714bb57a5432e8f95627f87f
--- /dev/null
+++ b/app/src/main/res/layout-land/fragment_twibbon.xml
@@ -0,0 +1,65 @@
+<?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=".FragmentTwibbon">
+
+
+    <FrameLayout
+        android:id="@+id/frameLayout"
+        android:layout_width="300dp"
+        android:layout_height="300dp"
+        android:layout_marginEnd="24dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.camera.view.PreviewView
+            android:id="@+id/previewView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+        <ImageView
+            android:id="@+id/imageView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop"
+            android:visibility="gone" />
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:src="@drawable/twibbon_frame" />
+    </FrameLayout>
+
+    <ImageButton
+        android:id="@+id/capture"
+        android:layout_width="60sp"
+        android:layout_height="60sp"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:scaleType="centerCrop"
+        android:src="@drawable/rounded_button"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/frameLayout"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <ImageButton
+        android:id="@+id/retakeButton"
+        android:layout_width="60sp"
+        android:layout_height="60sp"
+        android:layout_alignParentBottom="true"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:src="@drawable/baseline_refresh_24"
+        android:visibility="gone"
+        app:layout_constraintEnd_toStartOf="@+id/frameLayout"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/capture"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bondo_man_splash_screen.xml b/app/src/main/res/layout/activity_bondo_man_splash_screen.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b5e12cc0213adf901e658fd37c9d7e766ea05dc
--- /dev/null
+++ b/app/src/main/res/layout/activity_bondo_man_splash_screen.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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"
+
+    android:background="@drawable/background_gradient_splashscreen"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    tools:context=".BondoManSplashScreen">
+
+    <ImageView
+        android:id="@+id/imageView2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        app:srcCompat="@drawable/logo_bondoman" />
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_detail_transaction.xml b/app/src/main/res/layout/activity_detail_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03af554a896712a01a4522465f7a44192d37ff11
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail_transaction.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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"
+    android:background="@color/primary_color_4"
+    tools:context=".DetailTransactionActivity">
+
+    <FrameLayout
+        android:id="@+id/header_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <FrameLayout
+        android:id="@+id/frame_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/header_layout"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64d347f1366a83a93c4102473ef0c8b7dfe28e5d
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,73 @@
+<?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:id="@+id/loginActivity"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/login_background"
+    tools:context=".LoginActivity">
+
+    <ImageView
+        android:id="@+id/logoLogin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="24dp"
+        android:layout_marginEnd="8dp"
+        android:src="@drawable/logo_bondoman"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/iconLogin"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:src="@drawable/icon_awal"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/logoLogin" />
+
+    <TextView
+        android:id="@+id/tagline"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/tagline_awal"
+        android:textAlignment="center"
+        android:textColor="@color/primary1"
+        android:textSize="24sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/iconLogin" />
+
+    <TextView
+        android:id="@+id/desc_tagline"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:paddingHorizontal="30dp"
+        android:text="@string/desc_tagline_awal"
+        android:textAlignment="center"
+        android:textColor="@color/primary1"
+        android:textSize="16sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tagline" />
+
+    <Button
+        android:id="@+id/toLoginPageButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/login"
+        android:backgroundTint="@color/primary_color_1"
+        android:textColor="@color/white"
+
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/desc_tagline" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 17eab17ba76407d3dfcf42a0ec5819c199b0df8d..22d7b9d424565cb7221ccfbd2282312d9c841698 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,38 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout 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"
+    android:background="@color/primary_color_4"
     tools:context=".MainActivity">
 
-    <TextView
-        android:layout_width="wrap_content"
+    <FrameLayout
+        android:id="@+id/header_layout"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="Hello World!"
-        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
+    <FrameLayout
+        android:id="@+id/frame_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/header_layout"
+        android:layout_above="@id/bottom_navigation"/>
+
+    <com.google.android.material.bottomnavigation.BottomNavigationView
+        android:id="@+id/bottom_navigation"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:background="@color/secondary_color_2"
+        app:itemBackground="@color/secondary_color_2"
+        app:itemIconTint="@drawable/nav_item_color_selected"
+        app:itemTextColor="@color/primary_color_1"
+        app:labelVisibilityMode="labeled"
+        app:menu="@menu/bottom_nav_menu" />
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_detail_transaction.xml b/app/src/main/res/layout/fragment_detail_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..617269914565b8649c9ccf8f94730c254d2e4f7c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_detail_transaction.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".DetailTransaction">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="Title"
+            android:textColor="@color/primary_color_1"
+            android:textSize="16sp" />
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <EditText
+                android:id="@+id/inputTitle"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:inputType="textPersonName"
+                android:padding="12dp" />
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="How Much?"
+            android:textColor="@color/primary_color_1"
+            android:textSize="16sp" />
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <EditText
+                android:id="@+id/inputAmount"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:inputType="textPersonName"
+                android:padding="8dp"
+                android:textSize="36sp"
+                android:gravity="end"/>
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="Category"
+            android:textColor="@color/primary_color_1"
+            android:textSize="16sp" />
+
+        <RadioGroup
+            android:id="@+id/radioGroupCategory"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:orientation="horizontal">
+
+            <RadioButton
+                android:id="@+id/radioIncome"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="24dp"
+                android:text="Income"
+                android:textSize="24sp"/>
+
+            <RadioButton
+                android:id="@+id/radioExpense"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="24dp"
+                android:text="Expense"
+                android:textSize="24sp"/>
+        </RadioGroup>
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="Location"
+            android:textColor="@color/primary_color_1"
+            android:textSize="16sp" />
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <EditText
+                android:id="@+id/inputLocation"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="12dp" />
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <Button
+            android:id="@+id/buttonSave"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="48dp"
+            android:backgroundTint="@color/primary_color_1"
+            android:text="Save"
+            android:textColor="@color/white" />
+
+    </LinearLayout>
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_graphs.xml b/app/src/main/res/layout/fragment_graphs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e2436c8874fdd9a59b1f61a8824f17294c2305dd
--- /dev/null
+++ b/app/src/main/res/layout/fragment_graphs.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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=".Graphs">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/constraintLayout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/containerIncome"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="24dp"
+                android:layout_marginEnd="8dp"
+                android:background="@drawable/background_rounded_purple"
+                android:foregroundGravity="center_horizontal"
+                android:padding="10dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/containerExpense"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
+
+                <TextView
+                    android:id="@+id/incomeIcon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="4dp"
+                    android:drawableStart="@drawable/income"
+                    app:layout_constraintBottom_toBottomOf="@+id/incomeValueText"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/incomeText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="8dp"
+                    android:text="Income"
+                    android:textSize="16sp"
+                    app:layout_constraintStart_toEndOf="@+id/incomeIcon"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/incomeValueText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="8dp"
+                    android:text=""
+                    android:textSize="16sp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toEndOf="@id/incomeIcon"
+                    app:layout_constraintTop_toBottomOf="@+id/incomeText" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/containerExpense"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="24dp"
+                android:background="@drawable/background_rounded_peach"
+                android:padding="10dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@id/containerIncome"
+                app:layout_constraintTop_toTopOf="parent">
+
+                <TextView
+                    android:id="@+id/expenseIcon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="4dp"
+                    android:drawableStart="@drawable/expense"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/expenseText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="8dp"
+                    android:text="Expense"
+                    android:textSize="16sp"
+                    app:layout_constraintStart_toEndOf="@+id/expenseIcon"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/expenseValueText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="8dp"
+                    android:text=""
+                    android:textSize="16sp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toEndOf="@+id/expenseIcon"
+                    app:layout_constraintTop_toBottomOf="@+id/expenseText" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="350dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/constraintLayout">
+
+            <com.github.mikephil.charting.charts.PieChart
+                android:id="@+id/pie_chart"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
+
+            </com.github.mikephil.charting.charts.PieChart>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_header_detail_transaction.xml b/app/src/main/res/layout/fragment_header_detail_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b5734b61c996c724fd2ccc050d06c6ae8cc25cd7
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_detail_transaction.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    tools:context=".HeaderDetailTransaction">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:background="@drawable/rounded_background"
+        android:orientation="horizontal">
+
+        <ImageView
+            android:id="@+id/buttonBack"
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:layout_gravity="center_vertical"
+            android:layout_marginStart="20dp"
+            android:background="@drawable/baseline_arrow_back_ios_24" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            android:layout_gravity="center_horizontal">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_assignment_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="@string/fragment_transaction"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+
+
+    </FrameLayout>
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_header_graphs.xml b/app/src/main/res/layout/fragment_header_graphs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8718b05b0486c1009d8b0ee5ef76c3f2f20b2384
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_graphs.xml
@@ -0,0 +1,51 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="@drawable/rounded_background"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_pie_chart_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="@string/fragment_graphs"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_header_network.xml b/app/src/main/res/layout/fragment_header_network.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8658c4eb6453f58e35e187e953ff3448e42e4dcf
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_network.xml
@@ -0,0 +1,8 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    >
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_header_scan.xml b/app/src/main/res/layout/fragment_header_scan.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9397234f98af219bab530c49f8b7ad38b6785fb8
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_scan.xml
@@ -0,0 +1,51 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="@drawable/rounded_background"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_document_scanner_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="@string/fragment_scan"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_header_settings.xml b/app/src/main/res/layout/fragment_header_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff84dfe3272f68c3fc0c54c4cdb560182b7be3c8
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_settings.xml
@@ -0,0 +1,51 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="@drawable/rounded_background"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_settings_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="@string/fragment_settings"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_header_transaction.xml b/app/src/main/res/layout/fragment_header_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a56f0780f2a043ac580834bb0b88a33dbda87d3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_transaction.xml
@@ -0,0 +1,51 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="@drawable/rounded_background"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_assignment_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="@string/fragment_transaction"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_header_twibbon.xml b/app/src/main/res/layout/fragment_header_twibbon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..17a88a37a07915ea9ccea077b3911115ddd3f346
--- /dev/null
+++ b/app/src/main/res/layout/fragment_header_twibbon.xml
@@ -0,0 +1,51 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/primary_color_4"
+    >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="@drawable/rounded_background"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="16dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/imageView"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:src="@drawable/baseline_photo_camera_24" />
+
+            <TextView
+                android:id="@+id/textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="12dp"
+                android:text="Twibbon"
+                android:textColor="@color/primary_color_1"
+                android:textSize="25sp"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f8b28837e6bcf4e9f82edbabf8b70a7fd6c6ca59
--- /dev/null
+++ b/app/src/main/res/layout/fragment_login.xml
@@ -0,0 +1,118 @@
+<?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"
+    android:background="@drawable/login_backgroud2"
+    tools:context=".LoginFragment">
+
+    <TextView
+        android:id="@+id/backButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:drawableStart="@drawable/baseline_arrow_back_ios_24"
+        android:layout_marginTop="20dp"
+        android:layout_marginLeft="10dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:src="@drawable/logo_bondoman"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textView2"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/greet"
+        android:textAlignment="center"
+        android:textColor="@color/primary1"
+        android:textSize="34sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/imageView" />
+
+    <TextView
+        android:id="@+id/textView3"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:text="@string/login_into"
+        android:textAlignment="center"
+        android:textColor="@color/primary1"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView2" />
+
+    <EditText
+        android:id="@+id/emailInputField"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:background="@drawable/rounded_corne"
+        android:layout_marginHorizontal="24dp"
+        android:ems="10"
+        android:paddingVertical="10dp"
+        android:paddingStart="10dp"
+        android:hint="@string/email"
+        android:drawableStart="@drawable/baseline_mail_outline_24"
+        android:drawablePadding="7dp"
+        android:inputType="textEmailAddress"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView3" />
+
+    <EditText
+        android:id="@+id/passwordInputField"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:layout_marginHorizontal="24dp"
+        android:background="@drawable/rounded_corne"
+        android:drawableStart="@drawable/baseline_lock_24"
+        android:drawablePadding="7dp"
+        android:paddingStart="10dp"
+        android:ems="10"
+        android:paddingVertical="10dp"
+        android:hint="@string/password"
+        android:inputType="textPassword"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/emailInputField" />
+
+    <Button
+        android:id="@+id/loginButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/login"
+        android:backgroundTint="@color/primary_color_1"
+        android:textColor="@color/white"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/passwordInputField" />
+
+    <ImageView
+        android:id="@+id/imageView3"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_login"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/loginButton" />
+
+
+
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_network_error.xml b/app/src/main/res/layout/fragment_network_error.xml
new file mode 100644
index 0000000000000000000000000000000000000000..130fe170d4cca4a32cc04993696af16542824426
--- /dev/null
+++ b/app/src/main/res/layout/fragment_network_error.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".NetworkError">
+
+    <!-- TODO: Update blank fragment layout -->
+    <ImageView
+        android:id="@+id/iv_network"
+        android:layout_width="91dp"
+        android:layout_height="129dp"
+        android:layout_centerInParent="true"
+        android:src="@drawable/iv_network_check" />
+
+    <TextView
+        android:id="@+id/text_network_check"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/iv_network"
+        android:layout_alignParentEnd="true"
+        android:layout_marginTop="13dp"
+        android:layout_marginEnd="164dp"
+        android:layout_marginBottom="451dp"
+        android:text="@string/network_check" />
+
+    <TextView
+        android:id="@+id/text_network_check_desc"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/iv_network"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"
+        android:layout_marginTop="47dp"
+        android:layout_marginEnd="82dp"
+        android:layout_marginBottom="235dp"
+        android:text="@string/network_check_desc" />
+
+</RelativeLayout>
\ 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..6b3b2041270613ca3db118bbbe7aeb9cc277caff
--- /dev/null
+++ b/app/src/main/res/layout/fragment_scan.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".Scan">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/captureImageView"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:background="@drawable/iv_picture"
+            android:scaleType="centerCrop"
+            android:layout_marginHorizontal="12dp"/>
+
+        <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <Button
+                android:id="@+id/pickImgBtn"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="20dp"
+                android:background="@android:color/transparent"
+                android:drawableTop="@drawable/gallery"
+                android:text="Gallery"
+                android:textColor="@color/primary_color_1" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="120dp"
+                android:gravity="center">
+
+                <android.widget.Button
+                    android:id="@+id/captureImgBtn"
+                    android:layout_width="69dp"
+                    android:layout_height="71dp"
+                    android:background="@drawable/rounded_button"
+                    android:text="" />
+
+        </LinearLayout>
+
+
+        </FrameLayout>
+
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f780855b46b78e88ff0d8cef73d944f874a2900
--- /dev/null
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".Settings">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginHorizontal="16dp"
+        android:background="@drawable/rounded_background_gradient"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/iv_settings"
+            android:layout_width="180dp"
+            android:layout_height="180dp"
+            android:layout_centerInParent="true"
+            android:layout_marginTop="20dp"
+            android:src="@drawable/profile_icon" />
+
+        <TextView
+            android:id="@+id/emailTextView"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginVertical="16dp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="123@gmail.com"
+            android:textColor="@color/primary1"
+            android:textAlignment="center"/>
+
+        <Button
+            android:id="@+id/saveTransactionButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:background="@drawable/rounded_background_transparent"
+            android:text="Save Transaction List"
+            android:layout_marginVertical="10dp"
+            android:textColor="@color/primary1" />
+
+        <Button
+            android:id="@+id/sendTransactionButton"
+            android:layout_marginHorizontal="16dp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/rounded_background_transparent"
+            android:text="Send Transaction List"
+            android:layout_marginVertical="10dp"
+            android:textColor="@color/primary1" />
+        <Button
+            android:id="@+id/randomizeTransactionButton"
+            android:layout_marginHorizontal="16dp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/rounded_background_transparent"
+            android:text="Randomize"
+            android:layout_marginVertical="10dp"
+            android:textColor="@color/primary1" />
+
+        <Button
+            android:id="@+id/logoutButton"
+            android:layout_marginHorizontal="16dp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:drawableStart="@drawable/ic_launcher_foreground"
+            android:background="@drawable/rounded_background_transparent"
+            android:text="Logout"
+            android:layout_marginVertical="10dp"
+            android:textColor="@color/primary1" />
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_transaction.xml b/app/src/main/res/layout/fragment_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..89b3de33ad259fa0b0824b05cf518e7c47b7669e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_transaction.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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=".Transaction">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="8dp">
+
+        <LinearLayout
+            android:id="@+id/expense_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:layout_marginHorizontal="16dp">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/rounded_income"
+                    android:padding="16dp"
+                    android:orientation="horizontal"
+                    android:layout_marginRight="8dp">
+
+                    <ImageView
+                        android:layout_width="32dp"
+                        android:layout_height="32dp"
+                        android:src="@drawable/income"
+                        android:scaleType="fitCenter"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginRight="12dp"
+                        />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="Income"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="normal"
+                            android:textSize="16dp"
+                            />
+
+                        <TextView
+                            android:id="@+id/amount_income"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="bold"
+                            android:textSize="16dp"
+                            />
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/rounded_expense"
+                    android:padding="16dp"
+                    android:orientation="horizontal"
+                    android:layout_marginLeft="8dp">
+
+                    <ImageView
+                        android:layout_width="32dp"
+                        android:layout_height="32dp"
+                        android:src="@drawable/expense"
+                        android:scaleType="fitCenter"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginRight="12dp"
+                        />
+
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="Expense"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="normal"
+                            android:textSize="16dp"
+                            />
+
+                        <TextView
+                            android:id="@+id/amount_expense"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textColor="@color/primary_color_1"
+                            android:textStyle="bold"
+                            android:textSize="16dp"
+                            />
+                    </LinearLayout>
+                </LinearLayout>
+            </LinearLayout>
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Recently Transaction"
+                android:textSize="20dp"
+                android:textStyle="bold"
+                android:layout_marginTop="16dp"
+                android:textColor="@color/primary_color_1"/>
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rvTransaction"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:paddingBottom="48dp">
+                </androidx.recyclerview.widget.RecyclerView>
+        </LinearLayout>
+    </ScrollView>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/fabAdd"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentEnd="true"
+        app:srcCompat="@drawable/baseline_add_circle_24"
+        app:backgroundTint="@android:color/transparent"
+        app:fabSize="auto"
+        app:maxImageSize="60dp"
+        app:elevation="0dp"
+        app:layout_anchorGravity="bottom|end"/>
+
+</RelativeLayout>
diff --git a/app/src/main/res/layout/fragment_twibbon.xml b/app/src/main/res/layout/fragment_twibbon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df0b146dd85a6501b71d6d92a8a3472b42024c08
--- /dev/null
+++ b/app/src/main/res/layout/fragment_twibbon.xml
@@ -0,0 +1,66 @@
+<?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=".FragmentTwibbon">
+
+
+    <FrameLayout
+        android:id="@+id/frameLayout"
+        android:layout_width="400dp"
+        android:layout_height="400dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="30dp">
+
+        <androidx.camera.view.PreviewView
+            android:id="@+id/previewView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+        <ImageView
+            android:id="@+id/imageView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop"
+            android:visibility="gone" />
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:src="@drawable/twibbon_frame" />
+    </FrameLayout>
+
+    <ImageButton
+        android:id="@+id/capture"
+        android:layout_width="60sp"
+        android:layout_height="60sp"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:scaleType="centerCrop"
+        android:src="@drawable/rounded_button"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/frameLayout" />
+
+
+    <ImageButton
+        android:id="@+id/retakeButton"
+        android:layout_width="60sp"
+        android:layout_height="60sp"
+        android:layout_alignParentBottom="true"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:src="@drawable/baseline_refresh_24"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/capture"
+        app:layout_constraintTop_toBottomOf="@+id/frameLayout"
+        app:layout_constraintStart_toStartOf="parent"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_transaction.xml b/app/src/main/res/layout/row_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b1f180d0fdc8fe1d45d2f9718c62a69b97c2e85f
--- /dev/null
+++ b/app/src/main/res/layout/row_transaction.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:padding="16dp"
+    android:background="@drawable/border_transaction_layout"
+    android:layout_marginBottom="16dp">
+
+    <LinearLayout
+        android:id="@+id/transaction_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:layout_marginRight="8dp">
+            <TextView
+                android:id="@+id/title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="20dp"
+                android:textStyle="bold"
+                android:gravity="left"
+                android:layout_marginBottom="8dp"/>
+            <TextView
+                android:id="@+id/date"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16dp"
+                android:gravity="left"/>
+        </LinearLayout>
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:layout_marginLeft="8dp">
+            <TextView
+                android:id="@+id/amount"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textSize="20dp"
+                android:textStyle="bold"
+                android:gravity="right"
+                android:layout_marginBottom="8dp"/>
+            <TextView
+                android:id="@+id/category"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textSize="16dp"
+                android:gravity="right"/>
+        </LinearLayout>
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/location_delete_edit_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:gravity="center_vertical"
+        android:layout_marginTop="8dp">
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/outline_location_on_24"
+            android:layout_gravity="center_vertical"/>
+        <TextView
+            android:id="@+id/location"
+            android:layout_width="wrap_content"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:textSize="16sp"
+            android:layout_marginStart="8dp"/>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginLeft="8dp"
+            android:gravity="end">
+            <ImageButton
+                android:id="@+id/delete_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:src="@drawable/outline_delete_24"
+                android:background="@android:color/transparent"
+                android:layout_marginRight="4dp"/>
+
+            <ImageButton
+                android:id="@+id/edit_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:src="@drawable/outline_edit_note_24"
+                android:background="@android:color/transparent"
+                android:layout_marginLeft="4dp"/>
+        </LinearLayout>
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2de74741552a06c604f9da49e814beb8e9815ec
--- /dev/null
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/nav_transaction"
+        android:icon="@drawable/transaction_icon"
+        android:title="Transaction"
+        />
+    <item
+        android:id="@+id/nav_graphs"
+        android:icon="@drawable/graphs_icon"
+        android:title="Graphs"
+        />
+    <item
+        android:id="@+id/nav_scan"
+        android:icon="@drawable/scan_icon"
+        android:title="Scan"
+        />
+    <item
+        android:id="@+id/nav_twibbon"
+        android:icon="@drawable/camera_icon"
+        android:title="Twibbon"/>
+    <item
+        android:id="@+id/nav_settings"
+        android:icon="@drawable/settings_icon"
+        android:title="Settings"
+        />
+
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/side_nav_menu.xml b/app/src/main/res/menu/side_nav_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..56e3fbe1c08cb1764e105dc31bfd7aff299447c1
--- /dev/null
+++ b/app/src/main/res/menu/side_nav_menu.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/nav_transaction"
+        android:icon="@drawable/transaction_icon"
+        />
+    <item
+        android:id="@+id/nav_graphs"
+        android:icon="@drawable/graphs_icon"
+        />
+    <item
+        android:id="@+id/nav_scan"
+        android:icon="@drawable/scan_icon"
+        />
+    <item
+        android:id="@+id/nav_twibbon"
+        android:icon="@drawable/camera_icon" />
+    <item
+        android:id="@+id/nav_settings"
+        android:icon="@drawable/settings_icon"
+        />
+
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
new file mode 100644
index 0000000000000000000000000000000000000000..121252c803a5c391956582eeffcf22416cca265a
--- /dev/null
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation 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:id="@+id/nav_graph"
+    app:startDestination="@id/loginActivity2">
+
+    <activity
+        android:id="@+id/loginActivity2"
+        android:name="com.example.android_hit.LoginActivity"
+        android:label="activity_login"
+        tools:layout="@layout/activity_login" />
+    <fragment
+        android:id="@+id/loginFragment"
+        android:name="com.example.android_hit.LoginFragment"
+        android:label="fragment_login"
+        tools:layout="@layout/fragment_login" />
+</navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c8524cd961d27b6695e755c6ef2d4d58cf38431e..ec35c5ced0b731b0b4bc9a239f3bf3bb7d930ff5 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,4 +2,18 @@
 <resources>
     <color name="black">#FF000000</color>
     <color name="white">#FFFFFFFF</color>
+    <color name="primary_color_1">#322F50</color>
+    <color name="primary_color_2">#B1B8D8</color>
+    <color name="primary_color_3">#EFDAC7</color>
+    <color name="primary_color_4">#F0F0F2</color>
+    <color name="secondary_color_2">#DDDFEB</color>
+    <color name="primary1">#322F50</color>
+    <color name="primary2">#B1B8D8</color>
+    <color name="primary3">#EFDAC7</color>
+    <color name="primary4">#F0F0F2</color>
+    <color name="secondary1">#F9F9FC</color>
+    <color name="secondary2">#47455B</color>
+    <color name="secondary3">#095BFA</color>
+    <color name="secondary4">#D65C5C</color>
+    <color name="secondary5">#2DA039</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8f1d3958c7072c1c519412a9726b5375858947b1..16a6ea38e2a78a35ce190a4ab139c30c29cf2d01 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,30 @@
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
     <string name="app_name">Android-HIT</string>
+    <string name="tagline_awal">One Touch Solution for Your Budgeting</string>
+    <string name="desc_tagline_awal">Overbudget? Don’t worry! With us, managing your income and expanses is only one touch away</string>
+    <string name="login">Login</string>
+    <string name="login_into">Login to your account</string>
+    <string name="greet">Hi!</string>
+    <string name="password">Password </string>
+    <string name="email">Email</string>
+    <string name="hello_blank_fragment">Hello blank fragment</string>
+    <!-- Strings related to login -->
+    <string name="prompt_email">Email</string>
+    <string name="prompt_password">Password</string>
+    <string name="action_sign_in">Sign in or register</string>
+    <string name="action_sign_in_short">Sign in</string>
+    <string name="welcome">"Welcome!"</string>
+    <string name="invalid_username">Not a valid username</string>
+    <string name="invalid_password">Password must be >5 characters</string>
+    <string name="login_failed">"Login failed"</string>
+
+    <string name="fragment_transaction">Transaction</string>
+    <string name="fragment_settings">Settings</string>
+    <string name="fragment_graphs">Graphs</string>
+    <string name="fragment_scan">Scan</string>
+
+    <string name="network_check">Network Error</string>
+    <string name="network_check_desc">Please check your network connection</string>
+
+
 </resources>
\ No newline at end of file
diff --git a/img/addedittsx.png b/img/addedittsx.png
new file mode 100644
index 0000000000000000000000000000000000000000..8266b7394acc14fe8cbc81d4853009d5d176852a
Binary files /dev/null and b/img/addedittsx.png differ
diff --git a/img/confirmation-format.png b/img/confirmation-format.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a535407e887dcc5ee08daf992408eb0470baef1
Binary files /dev/null and b/img/confirmation-format.png differ
diff --git a/img/gmail.png b/img/gmail.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c4655d28c586436b04940bcdaab66419a3c6c33
Binary files /dev/null and b/img/gmail.png differ
diff --git a/img/graph.png b/img/graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..164001511218a375eef490381563f84f9f680528
Binary files /dev/null and b/img/graph.png differ
diff --git a/img/greetings.png b/img/greetings.png
new file mode 100644
index 0000000000000000000000000000000000000000..019ecc79accc0fb2a3172395bef4fdc215ea9406
Binary files /dev/null and b/img/greetings.png differ
diff --git a/img/login.png b/img/login.png
new file mode 100644
index 0000000000000000000000000000000000000000..d91be43f340bcf15976312128a15614a2c272659
Binary files /dev/null and b/img/login.png differ
diff --git a/img/randomize.png b/img/randomize.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bd3aeebfc968b93a7c8a72a0284daa4372c3ae1
Binary files /dev/null and b/img/randomize.png differ
diff --git a/img/savetsx.png b/img/savetsx.png
new file mode 100644
index 0000000000000000000000000000000000000000..2cd3e981edba1c375d89017b953079c4c2656c8b
Binary files /dev/null and b/img/savetsx.png differ
diff --git a/img/scan.png b/img/scan.png
new file mode 100644
index 0000000000000000000000000000000000000000..99d81c6f435f6d81ac7301fe411f7024611a3d67
Binary files /dev/null and b/img/scan.png differ
diff --git a/img/settings.png b/img/settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..6676c968ad6e0c0c1eadd183621fcdda0e45091e
Binary files /dev/null and b/img/settings.png differ
diff --git a/img/splashscreen.png b/img/splashscreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2ec5b0b1751d4fc846157bef7d22cafe1ac259f
Binary files /dev/null and b/img/splashscreen.png differ
diff --git a/img/tsxlist.png b/img/tsxlist.png
new file mode 100644
index 0000000000000000000000000000000000000000..373343d7ef945b1f85764808e61459890d026f8f
Binary files /dev/null and b/img/tsxlist.png differ
diff --git a/img/twibbon.png b/img/twibbon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca3c77432be996a5b74250115486cdd253c4cde5
Binary files /dev/null and b/img/twibbon.png differ
diff --git a/img/xlsx.png b/img/xlsx.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddf73b39c972c23cb65baca6d9f13d3f9ce4dbfe
Binary files /dev/null and b/img/xlsx.png differ
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 53b4f0015a3209cf613221c55125c671872c1e46..bbe8a8d9b7c0bddbb729bd80ded728ccb38a1310 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -3,6 +3,7 @@ pluginManagement {
         google()
         mavenCentral()
         gradlePluginPortal()
+        maven { url = uri("https://jitpack.io") }
     }
 }
 dependencyResolutionManagement {
@@ -10,6 +11,7 @@ dependencyResolutionManagement {
     repositories {
         google()
         mavenCentral()
+        maven { url = uri("https://jitpack.io") }
     }
 }