diff --git a/src/app/election/components/election-audit-log/election-audit-log.component.html b/src/app/election/components/election-audit-log/election-audit-log.component.html
new file mode 100644
index 000000000..e73d81c8d
--- /dev/null
+++ b/src/app/election/components/election-audit-log/election-audit-log.component.html
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+ search
+
+
+
+
+
+
+
+ @if (filterEntity || filterAction || searchText) {
+
+ }
+
+
{{ totalElements }} entries
+
+
+ @if (loading) {
+
+
+
Loading audit log...
+
+ } @else if (logs.length === 0) {
+
+
history
+
No audit entries found.
+
+ } @else {
+
+ @for (log of logs; track log.id) {
+
+
+ {{ actionMeta(log.action).icon }}
+
+
+
+
+
+
+ {{ actionMeta(log.action).label }}
+
+ {{ log.entityType }}
+ @if (log.entityId) {
+ #{{ log.entityId }}
+ }
+
+
+
+ {{ log.createdAt }}
+ {{ expandedId === log.id ? 'expand_less' : 'expand_more' }}
+
+
+
+
{{ log.description }}
+
+
+ @if (log.performedByName) {
+ person{{ log.performedByName }}
+ }
+ @if (log.ipAddress) {
+ computer{{ log.ipAddress }}
+ }
+ @if (log.officeId) {
+ businessOffice #{{ log.officeId }}
+ }
+
+
+ @if (expandedId === log.id && parsedDetails(log.details)) {
+
+
{{ parsedDetails(log.details) }}
+
+ }
+
+
+ }
+
+
+ @if (totalPages > 1) {
+
+ }
+ }
+
diff --git a/src/app/election/components/election-audit-log/election-audit-log.component.scss b/src/app/election/components/election-audit-log/election-audit-log.component.scss
new file mode 100644
index 000000000..fdc534e99
--- /dev/null
+++ b/src/app/election/components/election-audit-log/election-audit-log.component.scss
@@ -0,0 +1,410 @@
+/**
+ * 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/.
+ */
+
+.audit-log-page {
+ padding: 24px;
+ max-width: 960px;
+}
+
+.page-header {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+ margin-bottom: 24px;
+
+ h2 {
+ font-size: 22px;
+ font-weight: 700;
+ margin: 0 0 2px;
+ }
+
+ .sub-title {
+ font-size: 13px;
+ color: #718096;
+ margin: 0;
+ }
+
+ .back-link {
+ display: flex;
+ align-items: center;
+ color: #4a5568;
+ text-decoration: none;
+
+ &:hover {
+ color: #2563eb;
+ }
+ }
+
+ .btn-refresh {
+ margin-left: auto;
+ background: none;
+ border: 1px solid #e2e8f0;
+ border-radius: 8px;
+ padding: 6px 10px;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ color: #4a5568;
+
+ &:hover {
+ background: #f8fafc;
+ color: #2563eb;
+ }
+ }
+}
+
+.filter-bar {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ flex-wrap: wrap;
+ margin-bottom: 24px;
+ background: #fff;
+ border: 1px solid #e2e8f0;
+ border-radius: 12px;
+ padding: 12px 16px;
+
+ .search-wrap {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ flex: 1;
+ min-width: 200px;
+
+ mat-icon {
+ color: #a0aec0;
+ font-size: 18px;
+ }
+
+ input {
+ border: none;
+ outline: none;
+ font-size: 14px;
+ width: 100%;
+ background: transparent;
+ }
+ }
+
+ .filter-select {
+ border: 1px solid #e2e8f0;
+ border-radius: 8px;
+ padding: 6px 10px;
+ font-size: 13px;
+ color: #4a5568;
+ background: #f8fafc;
+ outline: none;
+ cursor: pointer;
+ }
+
+ .btn-clear {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ background: none;
+ border: 1px solid #fed7d7;
+ border-radius: 8px;
+ padding: 5px 10px;
+ font-size: 13px;
+ color: #e53e3e;
+ cursor: pointer;
+
+ mat-icon {
+ font-size: 14px;
+ height: 14px;
+ width: 14px;
+ }
+
+ &:hover {
+ background: #fff5f5;
+ }
+ }
+
+ .count-badge {
+ margin-left: auto;
+ background: #eff6ff;
+ color: #1d4ed8;
+ border-radius: 20px;
+ padding: 3px 10px;
+ font-size: 12px;
+ font-weight: 600;
+ }
+}
+
+.loading-state,
+.empty-state {
+ text-align: center;
+ padding: 60px 20px;
+ color: #718096;
+
+ mat-icon {
+ font-size: 48px;
+ height: 48px;
+ width: 48px;
+ opacity: 0.4;
+ display: block;
+ margin: 0 auto 12px;
+ }
+
+ .spinner {
+ width: 36px;
+ height: 36px;
+ border: 3px solid #e2e8f0;
+ border-top-color: #2563eb;
+ border-radius: 50%;
+ animation: spin 0.8s linear infinite;
+ margin: 0 auto 12px;
+ }
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.timeline {
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: 19px;
+ top: 0;
+ bottom: 0;
+ width: 2px;
+ background: #e2e8f0;
+ }
+}
+
+.timeline-item {
+ display: flex;
+ gap: 16px;
+ padding-bottom: 16px;
+ position: relative;
+}
+
+.timeline-dot {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ z-index: 1;
+ box-shadow: 0 0 0 3px #fff;
+
+ mat-icon {
+ color: #fff;
+ font-size: 18px;
+ height: 18px;
+ width: 18px;
+ }
+}
+
+.timeline-card {
+ flex: 1;
+ background: #fff;
+ border: 1px solid #e2e8f0;
+ border-radius: 12px;
+ padding: 14px 16px;
+ cursor: pointer;
+ transition: box-shadow 0.15s;
+
+ &:hover {
+ box-shadow: 0 2px 10px rgb(0 0 0 / 8%);
+ }
+
+ .timeline-item.expanded & {
+ border-color: #bfdbfe;
+ box-shadow: 0 2px 12px rgb(37 99 235 / 10%);
+ }
+}
+
+.card-main {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 6px;
+
+ .card-left {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .card-right {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ }
+}
+
+.action-label {
+ font-size: 14px;
+ font-weight: 700;
+}
+
+.entity-chip {
+ background: #f1f5f9;
+ color: #475569;
+ border-radius: 20px;
+ padding: 2px 8px;
+ font-size: 11px;
+ font-weight: 600;
+}
+
+.timestamp {
+ font-size: 12px;
+ color: #94a3b8;
+}
+
+.expand-icon {
+ font-size: 18px;
+ height: 18px;
+ width: 18px;
+ color: #94a3b8;
+}
+
+.description {
+ font-size: 13px;
+ color: #4a5568;
+ margin: 0 0 8px;
+}
+
+.card-meta {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+
+ .meta-chip {
+ display: inline-flex;
+ align-items: center;
+ gap: 3px;
+ background: #f8fafc;
+ border: 1px solid #e2e8f0;
+ border-radius: 20px;
+ padding: 2px 8px;
+ font-size: 11px;
+ color: #64748b;
+
+ mat-icon {
+ font-size: 12px;
+ height: 12px;
+ width: 12px;
+ }
+ }
+}
+
+.details-block {
+ margin-top: 10px;
+ background: #f8fafc;
+ border: 1px solid #e2e8f0;
+ border-radius: 8px;
+ padding: 10px 12px;
+
+ pre {
+ margin: 0;
+ font-size: 12px;
+ color: #2d3748;
+ white-space: pre-wrap;
+ word-break: break-all;
+ font-family: Consolas, Monaco, monospace;
+ }
+}
+
+.pagination-bar {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-top: 20px;
+ padding: 10px 14px;
+ background: #fff;
+ border: 1px solid #e2e8f0;
+ border-radius: 10px;
+}
+
+.pg-info {
+ font-size: 12px;
+ color: #718096;
+ white-space: nowrap;
+}
+
+.pg-controls {
+ display: flex;
+ align-items: center;
+ gap: 3px;
+}
+
+.pg-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 30px;
+ height: 30px;
+ padding: 0 4px;
+ border: 1px solid #e2e8f0;
+ border-radius: 6px;
+ background: #fff;
+ color: #4a5568;
+ font-size: 12px;
+ font-weight: 500;
+ cursor: pointer;
+ transition:
+ background 0.15s,
+ border-color 0.15s;
+
+ mat-icon {
+ font-size: 16px;
+ height: 16px;
+ width: 16px;
+ }
+
+ &:hover:not(:disabled) {
+ background: #eff6ff;
+ border-color: #2563eb;
+ color: #2563eb;
+ }
+
+ &:disabled {
+ opacity: 0.4;
+ cursor: not-allowed;
+ }
+}
+
+.pg-num--active {
+ background: #2563eb;
+ color: #fff;
+ border-color: #2563eb;
+
+ &:hover {
+ background: #1d4ed8;
+ }
+}
+
+.pg-size {
+ select {
+ padding: 5px 8px;
+ border: 1px solid #e2e8f0;
+ border-radius: 6px;
+ font-size: 12px;
+ color: #4a5568;
+ outline: none;
+ cursor: pointer;
+ background: #fff;
+
+ &:focus {
+ border-color: #2563eb;
+ }
+ }
+}
diff --git a/src/app/election/components/election-audit-log/election-audit-log.component.ts b/src/app/election/components/election-audit-log/election-audit-log.component.ts
new file mode 100644
index 000000000..e68f3801a
--- /dev/null
+++ b/src/app/election/components/election-audit-log/election-audit-log.component.ts
@@ -0,0 +1,232 @@
+/**
+ * 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, inject } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { RouterModule, ActivatedRoute } from '@angular/router';
+import { FormsModule } from '@angular/forms';
+import { MatIconModule } from '@angular/material/icon';
+import { Subject } from 'rxjs';
+import { debounceTime, takeUntil } from 'rxjs/operators';
+import { ElectionService } from '../../election.service';
+
+const ACTION_META: Record