diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index ae44a2c6237eafde985a8baad140a63c0e505281..8a1418fef3c0d1f4a88559e27ff88b9eada4c47d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -10,7 +10,7 @@ android {
 
     defaultConfig {
         applicationId = "com.example.bondoyap"
-        minSdk = 29
+        minSdk = 26
         targetSdk = 32
         versionCode = 1
         versionName = "1.0"
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
index 4aaafacbf0e653f98c065c7d2532fedd702561ff..d7ecda39782ae64f760d850dd2a1e04a84bb24da 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
@@ -5,7 +5,12 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.fragment.findNavController
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
 import com.example.bondoyap.R
 import com.example.bondoyap.databinding.FragmentTransactionsBinding
 
@@ -16,6 +21,10 @@ class TransactionsFragment: Fragment() {
     // onDestroyView.
     private val binding get() = _binding!!
 
+    private val transactionsViewModel: TransactionsViewModel by viewModels {
+        TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository)
+    }
+
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
@@ -23,6 +32,15 @@ class TransactionsFragment: Fragment() {
     ): View {
         _binding = FragmentTransactionsBinding.inflate(inflater, container, false)
 
+        val recyclerView = binding.root.findViewById<RecyclerView>(R.id.recyclerViewTransactions)
+        val adapter = TransactionsListAdapter()
+        recyclerView.adapter = adapter
+        recyclerView.layoutManager = LinearLayoutManager(requireContext())
+
+        transactionsViewModel.allTransactions.observe(viewLifecycleOwner, Observer { words ->
+            words?.let { adapter.submitList(it) }
+        })
+
         binding.buttonAddTransaction.setOnClickListener {
             findNavController().navigate(R.id.navigation_add_transactions)
         }
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..27979437e21a0113368b25e24db0a62cc72d91de
--- /dev/null
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt
@@ -0,0 +1,58 @@
+package com.example.bondoyap.ui.transactions
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import com.example.bondoyap.R
+
+class TransactionsListAdapter :
+    ListAdapter<Transactions, TransactionsViewHolder>(TransactionsDiffCallback()) {
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransactionsViewHolder {
+        return TransactionsViewHolder.create(parent)
+    }
+
+    override fun onBindViewHolder(holder: TransactionsViewHolder, position: Int) {
+        val currentTransaction = getItem(position)
+        holder.bind(currentTransaction)
+    }
+
+}
+
+class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    private val transactionTitle: TextView = itemView.findViewById(R.id.transactionTitle)
+    private val transactionAmount: TextView = itemView.findViewById(R.id.transactionAmount)
+    private val transactionCategory: TextView = itemView.findViewById(R.id.transactionCategory)
+
+    fun bind(transaction: Transactions) {
+        val amountText = "IDR " + transaction.nominal.toString()
+        transactionTitle.text = transaction.judul
+        transactionAmount.text = amountText
+        transactionCategory.text = when (transaction.isPemasukan) {
+            true -> "Pemasukan"
+            else -> "Pengeluaran"
+        }
+    }
+
+    companion object {
+        fun create(parent: ViewGroup): TransactionsViewHolder {
+            val view: View = LayoutInflater.from(parent.context)
+                .inflate(R.layout.recyclerview_transactions, parent, false)
+            return TransactionsViewHolder(view)
+        }
+    }
+}
+
+class TransactionsDiffCallback : DiffUtil.ItemCallback<Transactions>() {
+    override fun areItemsTheSame(oldItem: Transactions, newItem: Transactions): Boolean {
+        return oldItem.id == newItem.id
+    }
+
+    override fun areContentsTheSame(oldItem: Transactions, newItem: Transactions): Boolean {
+        return oldItem == newItem
+    }
+}
diff --git a/app/src/main/res/layout/fragment_transactions.xml b/app/src/main/res/layout/fragment_transactions.xml
index 940a17aa72850d5ef5eeca88569e639e8dc9d3b9..79600287495f8ba4d8189cd7ad96e48e21d423a7 100644
--- a/app/src/main/res/layout/fragment_transactions.xml
+++ b/app/src/main/res/layout/fragment_transactions.xml
@@ -3,6 +3,12 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent" >
 
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerViewTransactions"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginBottom="60dp"/>
+
     <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/button_addTransaction"
         android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/recyclerview_transactions.xml b/app/src/main/res/layout/recyclerview_transactions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b7809f7cc03bd59809e9f5da9ab116c2fbd201ee
--- /dev/null
+++ b/app/src/main/res/layout/recyclerview_transactions.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView 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:layout_margin="8dp"
+    app:cardCornerRadius="8dp"
+    app:cardElevation="4dp"
+    android:clickable="true"
+    android:focusable="true"
+    app:cardBackgroundColor="#af5eff">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="16dp">
+
+        <LinearLayout
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/transactionDate"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16sp"
+                android:text="Tanggal" />
+
+            <TextView
+                android:id="@+id/transactionTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="20sp"
+                android:textStyle="bold"
+                android:layout_marginTop="5dp"
+                android:layout_marginBottom="5dp"
+                android:text="Judul" />
+
+            <TextView
+                android:id="@+id/transactionAmount"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16sp"
+                android:text="Nominal" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/transactionCategory"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16sp"
+                android:text="Kategori" />
+
+            <TextView
+                android:id="@+id/transactionLocationn"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16sp"
+                android:text="Lokasi"
+                android:layout_marginTop="36dp"/>
+
+        </LinearLayout>
+
+    </LinearLayout>
+
+</androidx.cardview.widget.CardView>