diff --git a/src/app/accounts/accounts-list/accounts-list.component.html b/src/app/accounts/accounts-list/accounts-list.component.html
new file mode 100644
index 000000000..c90880af5
--- /dev/null
+++ b/src/app/accounts/accounts-list/accounts-list.component.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+ @if (isLoading) {
+
+
+ Loading accounts...
+
+ }
+
+ @if (!isLoading && dataSource.data.length === 0) {
+
+ }
+
+ @if (!isLoading && dataSource.data.length > 0) {
+
+
+
+
+ | Account No |
+
+ {{ row.accountNo }}
+ |
+
+
+
+
+ Type |
+
+
+ {{ getDepositTypeLabel(row) }}
+
+ |
+
+
+
+
+ Client |
+
+ {{ row.clientName }}
+ |
+
+
+
+
+ Product |
+
+ {{ row.savingsProductName || row.depositProductName || row.productName }}
+ |
+
+
+
+
+ Balance |
+
+ {{ getCurrencySymbol(row) }} {{ getBalance(row) | formatNumber }}
+ |
+
+
+
+
+ Status |
+
+
+ {{ getStatusLabel(row) }}
+
+ |
+
+
+
+
+ Actions |
+
+
+ |
+
+
+
+
+
+
+
+
+ }
+
+
diff --git a/src/app/accounts/accounts-list/accounts-list.component.scss b/src/app/accounts/accounts-list/accounts-list.component.scss
new file mode 100644
index 000000000..278974fce
--- /dev/null
+++ b/src/app/accounts/accounts-list/accounts-list.component.scss
@@ -0,0 +1,482 @@
+/**
+ * Copyright since 2025 Mifos Initiative
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// ─── Tokens ───────────────────────────────────────────────────────────────────
+$radius-sm: 8px;
+$radius-md: 12px;
+$radius-lg: 16px;
+$shadow-card:
+ 0 1px 3px rgb(0 0 0 / 6%),
+ 0 4px 16px rgb(0 0 0 / 6%);
+$transition: 0.15s ease;
+
+// ─── Page ─────────────────────────────────────────────────────────────────────
+.acl-page {
+ padding: 1.25rem 1.5rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ max-width: 1440px;
+ margin: 0 auto;
+}
+
+// ─── Header ───────────────────────────────────────────────────────────────────
+.acl-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 1.25rem 1.5rem;
+ border-radius: $radius-lg;
+ background: #fff;
+ box-shadow: $shadow-card;
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ inset: 0 auto 0 0;
+ width: 5px;
+ background: var(--accent-color, #1976d2);
+ border-radius: $radius-lg 0 0 $radius-lg;
+ }
+
+ &__left {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ }
+
+ &__icon-wrap {
+ width: 48px;
+ height: 48px;
+ border-radius: $radius-md;
+ background: var(--accent-bg, #e3f2fd);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 1.35rem;
+ color: var(--accent-color, #1976d2);
+ flex-shrink: 0;
+ }
+
+ &__title {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 700;
+ color: #1a2332;
+ letter-spacing: -0.01em;
+ line-height: 1.3;
+ }
+
+ &__subtitle {
+ font-size: 0.73rem;
+ color: #94a3b8;
+ margin-top: 3px;
+ display: block;
+ font-weight: 500;
+ }
+
+ // ── Accent variants ────────────────────────────────────────────────────────
+ &.accent--saving {
+ --accent-color: #1565c0;
+ --accent-bg: #dbeafe;
+ }
+
+ &.accent--current {
+ --accent-color: #065f46;
+ --accent-bg: #d1fae5;
+ }
+
+ &.accent--fd {
+ --accent-color: #6b21a8;
+ --accent-bg: #f3e8ff;
+ }
+
+ &.accent--rd {
+ --accent-color: #c2410c;
+ --accent-bg: #ffedd5;
+ }
+}
+
+// ─── Toolbar (Search + Actions) ───────────────────────────────────────────────
+.acl-toolbar {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 0.75rem 1rem;
+ background: #fff;
+ border-radius: $radius-md;
+ box-shadow: $shadow-card;
+}
+
+.acl-search-field {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ background: #f8fafc;
+ border: 1.5px solid #e2e8f0;
+ border-radius: $radius-sm;
+ padding: 0.45rem 0.9rem;
+ transition:
+ border-color $transition,
+ box-shadow $transition;
+
+ &:focus-within {
+ border-color: #3b82f6;
+ box-shadow: 0 0 0 3px rgb(59 130 246 / 12%);
+ background: #fff;
+ }
+
+ &__icon {
+ color: #94a3b8;
+ font-size: 0.8rem;
+ flex-shrink: 0;
+ }
+
+ &__input {
+ flex: 1;
+ border: none;
+ background: transparent;
+ outline: none;
+ font-size: 0.83rem;
+ color: #1e293b;
+
+ &::placeholder {
+ color: #cbd5e1;
+ }
+ }
+
+ &__clear {
+ border: none;
+ background: transparent;
+ color: #cbd5e1;
+ cursor: pointer;
+ padding: 0;
+ font-size: 0.75rem;
+ line-height: 1;
+ transition: color $transition;
+
+ &:hover {
+ color: #64748b;
+ }
+ }
+}
+
+.acl-toggle-btn,
+.acl-refresh-btn {
+ white-space: nowrap;
+ padding: 0.45rem 0.9rem;
+ border-radius: $radius-sm;
+ border: 1.5px solid #e2e8f0;
+ background: #f8fafc;
+ font-size: 0.78rem;
+ font-weight: 600;
+ color: #475569;
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.35rem;
+ transition:
+ background $transition,
+ color $transition,
+ border-color $transition;
+
+ &:hover {
+ background: #eff6ff;
+ color: #1d4ed8;
+ border-color: #bfdbfe;
+ }
+}
+
+.acl-refresh-btn {
+ width: 38px;
+ height: 38px;
+ padding: 0;
+ justify-content: center;
+ flex-shrink: 0;
+}
+
+// ─── Table Card ───────────────────────────────────────────────────────────────
+.acl-table-card {
+ background: #fff;
+ border-radius: $radius-lg;
+ box-shadow: $shadow-card;
+ border: 1px solid #f1f5f9;
+ overflow: hidden;
+ min-height: 280px;
+ position: relative;
+}
+
+.acl-loading {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 0.75rem;
+ padding: 4rem;
+ color: #94a3b8;
+ font-size: 0.83rem;
+ font-weight: 500;
+}
+
+.acl-empty {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ padding: 4rem;
+ color: #cbd5e1;
+
+ &__icon {
+ color: #e2e8f0;
+ }
+
+ p {
+ font-size: 0.88rem;
+ font-weight: 500;
+ color: #94a3b8;
+ margin: 0;
+ }
+}
+
+.acl-table-wrapper {
+ overflow-x: auto;
+}
+
+// ─── Table ────────────────────────────────────────────────────────────────────
+.acl-table {
+ width: 100%;
+
+ .acl-header-row {
+ background: #f8fafc;
+ border-bottom: 2px solid #e2e8f0;
+ }
+
+ .acl-th {
+ font-size: 0.65rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.07em;
+ color: #64748b;
+ padding: 0.75rem 1rem;
+ white-space: nowrap;
+
+ &--right {
+ text-align: right !important;
+ }
+
+ &--center {
+ text-align: center !important;
+ }
+ }
+
+ .acl-data-row {
+ cursor: pointer;
+ border-bottom: 1px solid #f8fafc;
+ transition: background $transition;
+
+ &:hover {
+ background: #f0f7ff !important;
+
+ .acl-acct-no {
+ color: #1d4ed8;
+ background: #dbeafe;
+ }
+ }
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+
+ .acl-td {
+ padding: 0.7rem 1rem;
+ font-size: 0.82rem;
+ vertical-align: middle;
+
+ &--right {
+ text-align: right !important;
+ }
+
+ &--center {
+ text-align: center !important;
+ }
+ }
+}
+
+// ─── Cell Atoms ───────────────────────────────────────────────────────────────
+.acl-acct-no {
+ font-family: 'Courier New', monospace;
+ font-size: 0.77rem;
+ font-weight: 700;
+ color: #1565c0;
+ background: #eff6ff;
+ padding: 3px 10px;
+ border-radius: 20px;
+ white-space: nowrap;
+ transition:
+ background $transition,
+ color $transition;
+}
+
+.acl-client-name {
+ font-weight: 600;
+ color: #1e293b;
+ font-size: 0.82rem;
+}
+
+.acl-product {
+ font-size: 0.75rem;
+ color: #64748b;
+ background: #f1f5f9;
+ padding: 3px 9px;
+ border-radius: $radius-sm;
+ display: inline-block;
+ max-width: 160px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ vertical-align: middle;
+ border: 1px solid #e2e8f0;
+}
+
+.acl-balance {
+ font-weight: 700;
+ font-size: 0.88rem;
+ color: #15803d;
+ white-space: nowrap;
+ font-variant-numeric: tabular-nums;
+}
+
+// ─── Deposit Type Badge ───────────────────────────────────────────────────────
+.acl-dtype-badge {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.62rem;
+ font-weight: 800;
+ padding: 3px 10px;
+ border-radius: 20px;
+ letter-spacing: 0.6px;
+ text-transform: uppercase;
+
+ &.dtype--sb {
+ background: #dbeafe;
+ color: #1e40af;
+ border: 1px solid #bfdbfe;
+ }
+
+ &.dtype--fd {
+ background: #f3e8ff;
+ color: #6b21a8;
+ border: 1px solid #e9d5ff;
+ }
+
+ &.dtype--rd {
+ background: #ffedd5;
+ color: #c2410c;
+ border: 1px solid #fed7aa;
+ }
+
+ &.dtype--ca {
+ background: #d1fae5;
+ color: #065f46;
+ border: 1px solid #a7f3d0;
+ }
+}
+
+// ─── Status Badge ─────────────────────────────────────────────────────────────
+.acl-status-badge {
+ display: inline-block;
+ font-size: 0.65rem;
+ font-weight: 700;
+ padding: 3px 10px;
+ border-radius: 20px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ white-space: nowrap;
+
+ &.status--submitted {
+ background: #fff7ed;
+ color: #c2410c;
+ border: 1px solid #fed7aa;
+ }
+
+ &.status--approved {
+ background: #eff6ff;
+ color: #1d4ed8;
+ border: 1px solid #bfdbfe;
+ }
+
+ &.status--active {
+ background: #f0fdf4;
+ color: #15803d;
+ border: 1px solid #bbf7d0;
+ }
+
+ &.status--withdrawn {
+ background: #fdf2f8;
+ color: #86198f;
+ border: 1px solid #f0abfc;
+ }
+
+ &.status--rejected {
+ background: #fff1f2;
+ color: #be123c;
+ border: 1px solid #fecdd3;
+ }
+
+ &.status--closed {
+ background: #f8fafc;
+ color: #64748b;
+ border: 1px solid #e2e8f0;
+ }
+
+ &.status--default {
+ background: #f8fafc;
+ color: #94a3b8;
+ border: 1px solid #e2e8f0;
+ }
+}
+
+// ─── Action Button ────────────────────────────────────────────────────────────
+.acl-view-btn {
+ width: 32px;
+ height: 32px;
+ border-radius: $radius-sm;
+ border: 1.5px solid #e2e8f0;
+ background: #f8fafc;
+ color: #64748b;
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.78rem;
+ transition:
+ background $transition,
+ color $transition,
+ border-color $transition,
+ box-shadow $transition;
+
+ &:hover {
+ background: #eff6ff;
+ color: #1d4ed8;
+ border-color: #bfdbfe;
+ box-shadow: 0 2px 8px rgb(29 78 216 / 15%);
+ }
+}
+
+// ─── Paginator ────────────────────────────────────────────────────────────────
+.acl-paginator {
+ border-top: 1px solid #f1f5f9;
+ background: #fafbfe;
+ font-size: 0.8rem;
+}
diff --git a/src/app/accounts/accounts-list/accounts-list.component.ts b/src/app/accounts/accounts-list/accounts-list.component.ts
new file mode 100644
index 000000000..2930757bf
--- /dev/null
+++ b/src/app/accounts/accounts-list/accounts-list.component.ts
@@ -0,0 +1,327 @@
+/**
+ * Copyright since 2025 Mifos Initiative
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { FormControl, ReactiveFormsModule } from '@angular/forms';
+import { MatPaginator, PageEvent } from '@angular/material/paginator';
+import { MatSort, MatSortHeader, Sort } from '@angular/material/sort';
+import {
+ MatTableDataSource,
+ MatTable,
+ MatColumnDef,
+ MatHeaderCellDef,
+ MatHeaderCell,
+ MatCellDef,
+ MatCell,
+ MatHeaderRowDef,
+ MatHeaderRow,
+ MatRowDef,
+ MatRow
+} from '@angular/material/table';
+import { Subject } from 'rxjs';
+import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
+import { NgClass, NgIf } from '@angular/common';
+import { FaIconComponent } from '@fortawesome/angular-fontawesome';
+import { MatCardModule } from '@angular/material/card';
+import { MatTooltipModule } from '@angular/material/tooltip';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
+import { MatButtonModule } from '@angular/material/button';
+import { FormatNumberPipe } from '../../pipes/format-number.pipe';
+import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
+import { AccountsService } from '../accounts.service';
+
+export type AccountType = 'savings' | 'current' | 'fixed-deposits' | 'recurring-deposits';
+
+interface AccountConfig {
+ label: string;
+ icon: string;
+ color: string;
+ accentClass: string;
+}
+
+@Component({
+ selector: 'mifosx-accounts-list',
+ templateUrl: './accounts-list.component.html',
+ styleUrls: ['./accounts-list.component.scss'],
+ standalone: true,
+ imports: [
+ ...STANDALONE_SHARED_IMPORTS,
+ ReactiveFormsModule,
+ FaIconComponent,
+ MatTable,
+ MatSort,
+ MatSortHeader,
+ MatColumnDef,
+ MatHeaderCellDef,
+ MatHeaderCell,
+ MatCellDef,
+ MatCell,
+ MatHeaderRowDef,
+ MatHeaderRow,
+ MatRowDef,
+ MatRow,
+ MatPaginator,
+ NgClass,
+ NgIf,
+ MatCardModule,
+ MatTooltipModule,
+ MatProgressSpinnerModule,
+ MatButtonModule,
+ FormatNumberPipe
+ ]
+})
+export class AccountsListComponent implements OnInit, OnDestroy {
+ private route = inject(ActivatedRoute);
+ private router = inject(Router);
+ private accountsService = inject(AccountsService);
+
+ private destroy$ = new Subject