+
+
+
+
+
+ Network Fee Forecast
+
+
+ #568
+
+
+
+ Time-series fee trends, seasonal patterns, 24-hour forecasts, and actionable timing strategies for Stellar
+ transactions.
+
+
+
+
+
+
+
}
+ />
+
}
+ />
+
}
+ />
+
:
}
+ />
+
}
+ />
+
+
+
+
+
+ AI Insights
+
+
+ {result.insights.map((insight) => (
+ -
+ {insight}
+
+ ))}
+
+
+
+
+ {(
+ [
+ ['forecast', 'Forecast Chart'],
+ ['seasonality', 'Seasonal Patterns'],
+ ['recommendations', 'Optimizations'],
+ ] as const
+ ).map(([id, label], idx, arr) => (
+
+ ))}
+
+
+ {tab === 'forecast' && (
+
+
+ Historical fees (48h) + 24h forecast band
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ d.forecast != null && d.actual != null)?.label}
+ stroke="var(--amber, #eab308)"
+ strokeDasharray="4 4"
+ />
+
+
+
+
+
+
+
+
+ )}
+
+ {tab === 'seasonality' && (
+
+
+
Hour-of-day fee intensity (UTC)
+
+ {result.seasonality.hourly.map((h) => (
+
+ ))}
+
+
+ Peak: {result.seasonality.peakHours.join(', ')}h · Trough: {result.seasonality.troughHours.join(', ')}h
+
+
+
+
+
Day-of-week averages
+
+ {result.seasonality.daily.map((d) => (
+
+
{d.label}
+
{d.avgFee}
+
×{d.multiplier.toFixed(2)}
+
+ ))}
+
+
+
+ )}
+
+ {tab === 'recommendations' && (
+
+ {result.recommendations.map((rec) => (
+
+ ))}
+
+ )}
+
+
+ Analyzed {new Date(result.analyzedAt).toLocaleString()} · {result.pointCount} hourly points · MAPE{' '}
+ {(result.accuracy.mape * 100).toFixed(1)}% · tolerance hit-rate{' '}
+ {(result.accuracy.withinToleranceRate * 100).toFixed(1)}%
+
+
+ )
+}
diff --git a/src/components/layout/MobileSidebar.tsx b/src/components/layout/MobileSidebar.tsx
index bf441593..591e7b6d 100644
--- a/src/components/layout/MobileSidebar.tsx
+++ b/src/components/layout/MobileSidebar.tsx
@@ -25,6 +25,7 @@ const NAV_ITEMS: NavItem[] = [
{ id: "contracts", label: "Contracts", icon: "◻" },
{ id: "assets", label: "Assets", icon: "💎" },
{ id: "network", label: "Network", icon: "◎" },
+ { id: "feeForecast", label: "Fee Forecast", icon: "📈" },
{ id: "realtime", label: "Real-Time", icon: "◉" },
{ id: "builder", label: "Builder", icon: "⚒" },
{ id: "faucet", label: "Faucet", icon: "⬡" },
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index 1ca13416..a605ce09 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -29,6 +29,7 @@ const NAV_ITEMS: NavItem[] = [
{ type: 'header', label: 'NETWORK' },
{ id: 'network', label: 'Network Info', icon: '◎' },
+ { id: 'feeForecast', label: 'Fee Forecast', icon: '📈' },
{ id: 'realtime', label: 'Real-Time', icon: '◉' },
{ id: 'liveActivity', label: 'Live Activity', icon: '⚡' },
{ id: 'cacheStats', label: 'Cache Stats', icon: '⊞' },
diff --git a/src/hooks/usePreload.ts b/src/hooks/usePreload.ts
index 5aab8d08..81552064 100644
--- a/src/hooks/usePreload.ts
+++ b/src/hooks/usePreload.ts
@@ -12,6 +12,7 @@ const TAB_LOADERS: Record