diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..b3405b3b32436569d6c9166762efd07fff07e534
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+My Application
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7643783a82f60b3b876fe58a9314fb50520df486
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,123 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JetCodeStyleSettings>
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </JetCodeStyleSettings>
+    <codeStyleSettings language="XML">
+      <option name="FORCE_REARRANGE_MODE" value="1" />
+      <indentOptions>
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />
+      </indentOptions>
+      <arrangement>
+        <rules>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>ANDROID_ATTRIBUTE_ORDER</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>.*</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+        </rules>
+      </arrangement>
+    </codeStyleSettings>
+    <codeStyleSettings language="kotlin">
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79ee123c2b23e069e35ed634d687e17f731cc702
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..43ff9693a26e05fb9bcfd153913cbbd2725903fe
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1663009b3d98c1f01d4a62e3b77b8ee847155aff..56349a91147b3e73821a79c421ef25de463b87a2 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,6 +1,7 @@
 plugins {
     alias(libs.plugins.androidApplication)
     alias(libs.plugins.jetbrainsKotlinAndroid)
+    kotlin("kapt") version "1.7.21"
 }
 
 android {
@@ -9,7 +10,7 @@ android {
 
     defaultConfig {
         applicationId = "com.example.myapplication"
-        minSdk = 34
+        minSdk = 33
         targetSdk = 34
         versionCode = 1
         versionName = "1.0"
@@ -55,4 +56,13 @@ dependencies {
     testImplementation(libs.junit)
     androidTestImplementation(libs.androidx.junit)
     androidTestImplementation(libs.androidx.espresso.core)
-}
\ No newline at end of file
+    implementation("androidx.room:room-runtime:2.4.0")
+    kapt("androidx.room:room-compiler:2.4.0")
+    implementation("androidx.room:room-ktx:2.4.0")
+    testImplementation("androidx.room:room-testing:2.4.0")
+    implementation("com.google.android.gms:play-services-location:<version>")
+}
+
+//dependencies {
+//    classpath ("androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0-rc01")
+//}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3c98a8ba53033802c3db9594a1fabe427c682126..7b06fcae6e487926851e50d7edecc6ba5d3349e7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,9 @@
     xmlns:tools="http://schemas.android.com/tools">
     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
     <application
         android:allowBackup="true"
diff --git a/app/src/main/java/com/example/myapplication/AddTransactionActivity.kt b/app/src/main/java/com/example/myapplication/AddTransactionActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..36f4a204d085b46ec58fc593cf83156abc5d6d1f
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/AddTransactionActivity.kt
@@ -0,0 +1,117 @@
+package com.example.myapplication
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.widget.Toast
+import androidx.lifecycle.ViewModelProvider
+import com.example.myapplication.database.TransactionDatabase
+import com.example.myapplication.entities.TransactionEntity
+import com.example.myapplication.repository.TransactionRepository
+import com.example.myapplication.viewmodel.TransactionViewModel
+import java.util.Date
+import android.widget.EditText
+import android.widget.Button
+
+import android.location.Location
+import kotlinx.coroutines.launch
+import androidx.lifecycle.lifecycleScope
+import android.annotation.SuppressLint
+//import com.example.myapplication.util.LocationUtils
+import androidx.core.app.ActivityCompat
+import android.Manifest
+import android.content.pm.PackageManager
+
+
+class AddTransactionActivity : AppCompatActivity() {
+    private lateinit var titleEditText: EditText
+    private lateinit var nominalEditText: EditText
+    private lateinit var kategoriEditText: EditText
+    private lateinit var lokasiEditText: EditText
+    private lateinit var saveButton: Button
+
+    private lateinit var transactionViewModel: TransactionViewModel
+    private lateinit var transactionRepository: TransactionRepository
+
+    private var currentLocation: Location? = null
+
+    companion object {
+        private const val LOCATION_PERMISSION_REQUEST_CODE = 123
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.fragment_add_transaction)
+
+        titleEditText = findViewById(R.id.editTextJudul)
+        nominalEditText = findViewById(R.id.editTextNominal)
+        kategoriEditText = findViewById(R.id.editTextKategori)
+        lokasiEditText = findViewById(R.id.editTextLokasi)
+        saveButton = findViewById(R.id.buttonSimpan)
+
+        val transactionDao = TransactionDatabase.getInstance(this).transactionDao()
+        transactionRepository = TransactionRepository(transactionDao)
+        transactionViewModel = ViewModelProvider(this).get(TransactionViewModel::class.java)
+
+        saveButton.setOnClickListener {
+            lifecycleScope.launch {
+                saveTransaction()
+            }
+        }
+//        getLocation()
+    }
+
+    private suspend fun saveTransaction() {
+        val title = titleEditText.text.toString().trim()
+        val nominal = nominalEditText.text.toString().trim()
+        val kategori = kategoriEditText.text.toString().trim()
+        val lokasi = lokasiEditText.text.toString().trim()
+        val tanggal = Date()
+
+        if (title.isEmpty() || nominal.isEmpty() || kategori.isEmpty() || lokasi.isEmpty()) {
+            Toast.makeText(this, "Isi semua atribut transaksi", Toast.LENGTH_SHORT).show()
+            return
+        }
+
+        val transaction = TransactionEntity(1, title, nominal, kategori, lokasi, tanggal)
+        lifecycleScope.launch {
+            transactionViewModel.addTransaction(transaction)
+            Toast.makeText(this@AddTransactionActivity, "Transaksi berhasil ditambahkan", Toast.LENGTH_SHORT).show()
+            finish()
+        }
+        finish()
+    }
+
+
+//    @SuppressLint("MissingPermission")
+//    private fun getLocation() {
+//        if (LocationUtils.isLocationPermissionGranted(this)) {
+//            LocationUtils.requestLocationUpdates(this, object : LocationUtils.LocationCallback {
+//                override fun onLocationReceived(location: Location) {
+//                    currentLocation = location
+//                    lokasiEditText.setText("${location.latitude}, ${location.longitude}")
+//                }
+//            })
+//        } else {
+//            ActivityCompat.requestPermissions(
+//                this,
+//                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
+//                LOCATION_PERMISSION_REQUEST_CODE
+//            )
+//        }
+//    }
+//
+//    override fun onRequestPermissionsResult(
+//        requestCode: Int,
+//        permissions: Array<out String>,
+//        grantResults: IntArray
+//    ) {
+//        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+//        if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
+//            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+//                getLocation()
+//            } else {
+//                Toast.makeText(this, "Izin akses lokasi ditolak", Toast.LENGTH_SHORT).show()
+//            }
+//        }
+//    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/converters/DateConverter.kt b/app/src/main/java/com/example/myapplication/converters/DateConverter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6e7f5dc45b63a988bf3f2c979de029b98b817dfb
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/converters/DateConverter.kt
@@ -0,0 +1,16 @@
+package com.example.myapplication.converters
+
+import androidx.room.TypeConverter
+import java.util.Date
+
+class DateConverter {
+    @TypeConverter
+    fun fromDate(date: Date): Long {
+        return date.time
+    }
+
+    @TypeConverter
+    fun toDate(timestamp: Long): Date {
+        return Date(timestamp)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/dao/TransactionDao.kt b/app/src/main/java/com/example/myapplication/dao/TransactionDao.kt
new file mode 100644
index 0000000000000000000000000000000000000000..283d93d88e43713d578f98796d1fc42b82b88a82
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/dao/TransactionDao.kt
@@ -0,0 +1,25 @@
+package com.example.myapplication.dao
+
+import androidx.lifecycle.LiveData
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import androidx.room.Update
+import androidx.room.Delete
+import com.example.myapplication.entities.TransactionEntity
+
+
+@Dao
+interface TransactionDao {
+    @Insert
+    suspend fun insertTransaction(transaction: TransactionEntity): Long
+
+    @Query("SELECT * FROM transactionentity")
+    fun getAllTransactions(): LiveData<List<TransactionEntity>>
+
+    @Update
+    fun update(transaction: TransactionEntity)
+
+    @Delete
+    fun delete(transaction: TransactionEntity)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/TransactionDatabase.kt b/app/src/main/java/com/example/myapplication/database/TransactionDatabase.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8ea017f370054bb2fa8728873d8738f18437049c
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/TransactionDatabase.kt
@@ -0,0 +1,32 @@
+package com.example.myapplication.database
+
+import com.example.myapplication.dao.TransactionDao
+import com.example.myapplication.entities.TransactionEntity
+import android.content.Context
+import androidx.room.Database
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import com.example.myapplication.converters.DateConverter
+import androidx.room.TypeConverters
+
+
+@Database (entities = [TransactionEntity::class], version = 1)
+@TypeConverters(DateConverter::class)
+abstract class TransactionDatabase : RoomDatabase() {
+    abstract fun transactionDao(): TransactionDao
+
+    companion object {
+        @Volatile
+        private var instance: TransactionDatabase? = null
+
+        fun getInstance (context: Context): TransactionDatabase {
+            return instance ?: synchronized(this) {
+                instance ?: Room.databaseBuilder(
+                    context.applicationContext,
+                    TransactionDatabase::class.java,
+                    "transaction_database"
+                ).build().also { instance = it }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/entities/TransactionEntities.kt b/app/src/main/java/com/example/myapplication/entities/TransactionEntities.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3ffb425afe36841c4d3b61027fdf3f06f222cd77
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/entities/TransactionEntities.kt
@@ -0,0 +1,29 @@
+package com.example.myapplication.entities
+
+import java.util.Date
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+import androidx.room.ColumnInfo
+
+
+@Entity(tableName = "transactionentity")
+data class TransactionEntity(
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "id")
+    val id: Int = 0,
+
+    @ColumnInfo(name = "title")
+    val title: String,
+
+    @ColumnInfo(name = "nominal")
+    val nominal: String,
+
+    @ColumnInfo(name = "kategori")
+    val kategori: String,
+
+    @ColumnInfo(name = "lokasi")
+    val lokasi: String,
+
+    @ColumnInfo(name = "tanggal")
+    val tanggal: Date
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/repository/TransactionRepository.kt b/app/src/main/java/com/example/myapplication/repository/TransactionRepository.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1e0c455e676d10a61ad30342e400d3a39f5478d0
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/repository/TransactionRepository.kt
@@ -0,0 +1,14 @@
+package com.example.myapplication.repository
+
+import androidx.lifecycle.LiveData
+import com.example.myapplication.dao.TransactionDao
+import com.example.myapplication.entities.TransactionEntity
+
+
+class TransactionRepository(private val transactionDao: TransactionDao) {
+    val allTransactions: LiveData<List<TransactionEntity>> = transactionDao.getAllTransactions()
+
+    suspend fun insertTransaction(transaction: TransactionEntity): Long {
+        return transactionDao.insertTransaction(transaction)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/ui/transactions/TransactionsFragment.kt b/app/src/main/java/com/example/myapplication/ui/transactions/TransactionsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6c4ada191072b6941f53ddbffd87e1a48b615030
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/ui/transactions/TransactionsFragment.kt
@@ -0,0 +1,45 @@
+//package com.example.myapplication.ui.transactions
+//
+//import android.os.Bundle
+//import android.view.LayoutInflater
+//import android.view.View
+//import android.view.ViewGroup
+//import androidx.fragment.app.Fragment
+//import androidx.recyclerview.widget.LinearLayoutManager
+//import androidx.recyclerview.widget.RecyclerView
+//import com.example.myapplication.R
+//import com.example.myapplication.data.Transaction
+//import com.example.myapplication.data.TransactionAdapter
+//
+//class TransactionsFragment : Fragment() {
+//
+//    private lateinit var recyclerView: RecyclerView
+//    private lateinit var transactionAdapter: TransactionAdapter
+//    private val transactionList = mutableListOf<Transaction>()
+//
+//    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+//        val root = inflater.inflate(R.layout.fragment_transactions, container, false)
+//
+//        recyclerView = root.findViewById(R.id.recyclerViewTransactions)
+//        recyclerView.layoutManager = LinearLayoutManager(requireContext())
+//        transactionAdapter = TransactionAdapter(transactionList)
+//        recyclerView.adapter = transactionAdapter
+//
+//        return root
+//    }
+//
+//    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+//        super.onViewCreated(view, savedInstanceState)
+//
+//        // Simulate loading transactions from a data source
+//        loadTransactions()
+//    }
+//
+//    private fun loadTransactions() {
+//        transactionViewModel.allTransactions.observe(viewLifecycleOwner, { transactions ->
+//            transactionList.clear()
+//            transactionList.addAll(transactions.map { Transaction(it.title, it.nominal) })
+//            transactionAdapter.notifyDataSetChanged()
+//        })
+//    }
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/util/LocationUtils.kt b/app/src/main/java/com/example/myapplication/util/LocationUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4b22622a8c6a0c1357ffa855001edc6afcc55e51
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/util/LocationUtils.kt
@@ -0,0 +1,50 @@
+//package com.example.myapplication.util
+//
+//import android.content.Context
+//import android.content.pm.PackageManager
+//import android.location.Location
+//import android.location.LocationListener
+//import android.location.LocationManager
+//import android.os.Bundle
+//import androidx.core.content.ContextCompat
+//
+//object LocationUtils {
+//
+//    interface LocationCallback {
+//        fun onLocationReceived(location: Location)
+//    }
+//
+//    fun isLocationPermissionGranted(context: Context): Boolean {
+//        val permission = android.Manifest.permission.ACCESS_FINE_LOCATION
+//        val granted = PackageManager.PERMISSION_GRANTED
+//        return ContextCompat.checkSelfPermission(context, permission) == granted
+//    }
+//
+//    fun requestLocationUpdates(context: Context, callback: LocationCallback) {
+//        val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
+//
+//        val locationListener = object : LocationListener {
+//            override fun onLocationChanged(location: Location) {
+//                callback.onLocationReceived(location)
+//                locationManager.removeUpdates(this)
+//            }
+//
+//            @Deprecated("Deprecated in Java")
+//            override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
+//
+//            override fun onProviderEnabled(provider: String) {}
+//
+//            override fun onProviderDisabled(provider: String) {}
+//        }
+//
+//        try {
+//            val minTime: Long = 0
+//            val minDistance = 0f
+//            val criteria = LocationManager.PASSIVE_PROVIDER
+//            @Suppress("DEPRECATION")
+//            locationManager.requestSingleUpdate(criteria, locationListener, null)
+//        } catch (e: SecurityException) {
+//            e.printStackTrace()
+//        }
+//    }
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/viewmodel/TransactionViewModel.kt b/app/src/main/java/com/example/myapplication/viewmodel/TransactionViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a7e7748e4cca51bf3bc0be5c5f74a5909c1fe2f1
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/viewmodel/TransactionViewModel.kt
@@ -0,0 +1,22 @@
+package com.example.myapplication.viewmodel
+
+import androidx.lifecycle.ViewModel
+import com.example.myapplication.dao.TransactionDao
+import com.example.myapplication.entities.TransactionEntity
+
+class TransactionViewModel(private val transactionDao: TransactionDao) : ViewModel() {
+
+    suspend fun addTransaction(transaction: TransactionEntity): Long {
+        return transactionDao.insertTransaction(transaction)
+    }
+
+    fun getAllTransactions() = transactionDao.getAllTransactions()
+
+    fun updateTransaction(transaction: TransactionEntity) {
+        transactionDao.update(transaction)
+    }
+
+    fun deleteTransaction(transaction: TransactionEntity) {
+        transactionDao.delete(transaction)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_transaction_list.xml b/app/src/main/res/layout/activity_transaction_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..58a86db7217e3717db4a9a2ea76722cf4358f2b8
--- /dev/null
+++ b/app/src/main/res/layout/activity_transaction_list.xml
@@ -0,0 +1,11 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerViewTransactions"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_transaction.xml b/app/src/main/res/layout/item_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..324f70a311f4217786f23aac148585a019bdddf8
--- /dev/null
+++ b/app/src/main/res/layout/item_transaction.xml
@@ -0,0 +1,38 @@
+<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">
+
+    <TextView
+        android:id="@+id/textViewDate"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="16sp"
+        android:textStyle="bold" />
+
+    <TextView
+        android:id="@+id/textViewTitle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="16sp" />
+
+    <TextView
+        android:id="@+id/textViewCategory"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="14sp" />
+
+    <TextView
+        android:id="@+id/textViewPrice"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="14sp" />
+
+    <TextView
+        android:id="@+id/textViewLocation"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="14sp" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 9439edab38a731e1bd60250d54ab6221c3df626a..4c1ded7b783dd8c8772799adc9529e29d6bcaec8 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -22,4 +22,11 @@
         android:name="com.example.myapplication.ui.notifications.NotificationsFragment"
         android:label="@string/title_notifications"
         tools:layout="@layout/fragment_notifications" />
+
+    <fragment
+        android:id="@+id/navigation_transactions"
+        android:name="com.example.myapplication.ui.transactions.TransactionsFragment"
+        android:label="TRANSACTIONS"
+        tools:layout="@layout/activity_transaction_list" />
+
 </navigation>
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index a0985efc88dec705956b74f5d6e9ac23c8daebb8..bc982cbbf66dc79d62b21856f16d99b1d95aaea6 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,4 +2,5 @@
 plugins {
     alias(libs.plugins.androidApplication) apply false
     alias(libs.plugins.jetbrainsKotlinAndroid) apply false
+    kotlin("kapt") version "1.7.21"
 }
\ No newline at end of file