diff --git a/frontend/src/test/mocks/handlers.ts b/frontend/src/test/mocks/handlers.ts
index cc82ea55..7843cef6 100644
--- a/frontend/src/test/mocks/handlers.ts
+++ b/frontend/src/test/mocks/handlers.ts
@@ -39,4 +39,54 @@ export const handlers = [
lastUpdated: new Date().toISOString(),
});
}),
+
+ // Mock indexed search endpoint used by GlobalSearch / SearchModal autocomplete
+ http.get("/api/v1/search", ({ request }) => {
+ const url = new URL(request.url);
+ const query = url.searchParams.get("q") ?? "";
+
+ const allResults = [
+ {
+ id: "xlm",
+ type: "asset" as const,
+ title: "XLM",
+ description: "Stellar Lumens",
+ relevanceScore: 1,
+ highlights: ["XLM"],
+ metadata: { symbol: "XLM" },
+ },
+ {
+ id: "usdc",
+ type: "asset" as const,
+ title: "USDC",
+ description: "USD Coin",
+ relevanceScore: 0.9,
+ highlights: ["USDC"],
+ metadata: { symbol: "USDC" },
+ },
+ {
+ id: "stellar-bridge",
+ type: "bridge" as const,
+ title: "Stellar Bridge",
+ description: "Cross-chain bridge for Stellar assets",
+ relevanceScore: 0.8,
+ highlights: ["Stellar"],
+ metadata: {},
+ },
+ ];
+
+ const q = query.toLowerCase();
+ const results = q
+ ? allResults.filter(
+ (r) =>
+ r.title.toLowerCase().includes(q) ||
+ r.description.toLowerCase().includes(q)
+ )
+ : [];
+
+ return HttpResponse.json({
+ success: true,
+ data: { results, total: results.length },
+ });
+ }),
];
diff --git a/frontend/src/types/timeline.ts b/frontend/src/types/timeline.ts
new file mode 100644
index 00000000..756d439a
--- /dev/null
+++ b/frontend/src/types/timeline.ts
@@ -0,0 +1,115 @@
+/**
+ * Timeline event types and interfaces for the Recent Activity Timeline
+ */
+
+export type TimelineEventType = "bridge" | "asset" | "alert" | "transaction" | "health";
+
+export type TimelineEventSeverity = "info" | "warning" | "critical";
+
+export type TimelineEventStatus = "active" | "resolved" | "pending" | "completed" | "failed";
+
+/**
+ * Base timeline event interface
+ */
+export interface BaseTimelineEvent {
+ id: string;
+ type: TimelineEventType;
+ timestamp: string;
+ title: string;
+ description: string;
+ severity?: TimelineEventSeverity;
+ status?: TimelineEventStatus;
+ metadata?: Record;
+}
+
+/**
+ * Bridge-related timeline event
+ */
+export interface BridgeTimelineEvent extends BaseTimelineEvent {
+ type: "bridge";
+ bridgeName: string;
+ bridgeStatus: "healthy" | "degraded" | "down" | "unknown";
+ totalValueLocked?: number;
+ mismatchPercentage?: number;
+}
+
+/**
+ * Asset-related timeline event
+ */
+export interface AssetTimelineEvent extends BaseTimelineEvent {
+ type: "asset";
+ assetSymbol: string;
+ assetName?: string;
+ healthScore?: number;
+ priceChange?: number;
+}
+
+/**
+ * Alert-related timeline event
+ */
+export interface AlertTimelineEvent extends BaseTimelineEvent {
+ type: "alert";
+ severity: TimelineEventSeverity;
+ assetSymbol?: string;
+ bridgeName?: string;
+ alertType?: string;
+}
+
+/**
+ * Transaction-related timeline event
+ */
+export interface TransactionTimelineEvent extends BaseTimelineEvent {
+ type: "transaction";
+ status: TimelineEventStatus;
+ txHash: string;
+ bridge: string;
+ asset: string;
+ amount: number;
+ sourceChain: string;
+ destinationChain: string;
+}
+
+/**
+ * Health score update timeline event
+ */
+export interface HealthTimelineEvent extends BaseTimelineEvent {
+ type: "health";
+ assetSymbol: string;
+ previousScore: number;
+ currentScore: number;
+ trend: "improving" | "stable" | "deteriorating";
+}
+
+/**
+ * Union type for all timeline events
+ */
+export type TimelineEvent =
+ | BridgeTimelineEvent
+ | AssetTimelineEvent
+ | AlertTimelineEvent
+ | TransactionTimelineEvent
+ | HealthTimelineEvent;
+
+/**
+ * Timeline filter options
+ */
+export interface TimelineFilters {
+ types: TimelineEventType[];
+ severities: TimelineEventSeverity[];
+ statuses: TimelineEventStatus[];
+ searchQuery: string;
+ dateFrom?: string;
+ dateTo?: string;
+ assetSymbol?: string;
+ bridgeName?: string;
+}
+
+/**
+ * Timeline display mode
+ */
+export type TimelineDisplayMode = "compact" | "expanded";
+
+/**
+ * Timeline sort options
+ */
+export type TimelineSortOrder = "newest" | "oldest";