diff --git a/03_implementation/ui/src/app/AppShell.tsx b/03_implementation/ui/src/app/AppShell.tsx
index 4bc3b5cc..c8448a31 100644
--- a/03_implementation/ui/src/app/AppShell.tsx
+++ b/03_implementation/ui/src/app/AppShell.tsx
@@ -21,7 +21,7 @@ export function AppShell({ children }: { children?: ReactNode }) {
-
+
{children}
diff --git a/03_implementation/ui/src/components/layout/Sidebar.tsx b/03_implementation/ui/src/components/layout/Sidebar.tsx
index e011351a..74d9c980 100644
--- a/03_implementation/ui/src/components/layout/Sidebar.tsx
+++ b/03_implementation/ui/src/components/layout/Sidebar.tsx
@@ -32,7 +32,9 @@ export function Sidebar() {
/>
))}
-
+
);
}
diff --git a/03_implementation/ui/src/components/layout/TopBar.tsx b/03_implementation/ui/src/components/layout/TopBar.tsx
index dbe7d4e6..bdc04f64 100644
--- a/03_implementation/ui/src/components/layout/TopBar.tsx
+++ b/03_implementation/ui/src/components/layout/TopBar.tsx
@@ -27,17 +27,26 @@ export function TopBar({ activeLabel }: { activeLabel: string }) {
useEffect(() => {
let mounted = true;
- void adapters.getSystemSnapshot().then((snapshot) => {
- if (mounted) setSys(snapshot);
- });
- void adapters.getNotifications().then((items) => {
- if (mounted) setNotifications(items);
- });
- void adapters.getLatestProofBundle().then((bundle) => {
- if (mounted) setLatestProof(bundle);
- });
+
+ const fetchAll = () => {
+ void adapters.getSystemSnapshot().then((snapshot) => {
+ if (mounted) setSys(snapshot);
+ });
+ void adapters.getNotifications().then((items) => {
+ if (mounted) setNotifications(items);
+ });
+ void adapters.getLatestProofBundle().then((bundle) => {
+ if (mounted) setLatestProof(bundle);
+ });
+ };
+
+ fetchAll();
+ // Refresh system status every 10 s — non-critical display data; 10 s avoids render churn.
+ const timer = window.setInterval(fetchAll, 10_000);
+
return () => {
mounted = false;
+ window.clearInterval(timer);
};
}, []);