From cd93d1a06d035e51c35d701105095bf1d5996d18 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Sun, 7 Jun 2026 23:21:40 +0700 Subject: [PATCH] feat(web): add telemetry dashboard page with nginx proxy and nav integration --- apps/web/nginx.conf | 17 +++ apps/web/src/app.tsx | 9 ++ apps/web/src/components/layout/mobile-nav.tsx | 1 + apps/web/src/components/layout/navbar.tsx | 6 + apps/web/src/pages/telemetry-page.tsx | 127 ++++++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 apps/web/src/pages/telemetry-page.tsx diff --git a/apps/web/nginx.conf b/apps/web/nginx.conf index 11bce60..5d9fa05 100644 --- a/apps/web/nginx.conf +++ b/apps/web/nginx.conf @@ -21,6 +21,23 @@ server { proxy_set_header X-Forwarded-Proto $scheme; } + # Proxy telemetry dashboard to orange VPS (via Tailscale) + location /telemetry/ { + proxy_pass http://100.96.248.86:8181/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 5s; + proxy_send_timeout 35s; + proxy_read_timeout 35s; + proxy_buffering on; + proxy_buffer_size 4k; + proxy_buffers 8 4k; + proxy_busy_buffers_size 8k; + } + location / { try_files $uri $uri/ /index.html; } diff --git a/apps/web/src/app.tsx b/apps/web/src/app.tsx index d3cfce9..914b0ca 100644 --- a/apps/web/src/app.tsx +++ b/apps/web/src/app.tsx @@ -14,6 +14,7 @@ import { DiseaseDetailPage } from "@/pages/disease-detail-page"; import { DiagnosisDetailPage } from "@/pages/diagnosis-detail-page"; import { ExpertReviewsPage } from "@/pages/expert-reviews-page"; import { DiagnosesPage } from "@/pages/diagnoses-page"; +import { TelemetryPage } from "@/pages/telemetry-page"; import { MainLayout } from "@/components/layout/main-layout"; import { trackPageView } from "./lib/telemetry"; @@ -85,6 +86,14 @@ const router = createBrowserRouter([ ), }, + { + path: "/telemetry", + element: ( + + + + ), + }, ]); function PageViewTracker() { diff --git a/apps/web/src/components/layout/mobile-nav.tsx b/apps/web/src/components/layout/mobile-nav.tsx index c5f68dc..4262154 100644 --- a/apps/web/src/components/layout/mobile-nav.tsx +++ b/apps/web/src/components/layout/mobile-nav.tsx @@ -13,6 +13,7 @@ const NAV_ITEMS = [ { path: "/diagnoses", label: "Diagnosa" }, { path: "/catalog", label: "Pustaka", altPath: "/library" }, { path: "/expert/reviews", label: "Review" }, + { path: "/telemetry", label: "Telemetry" }, ]; export function MobileNav({ open, onClose }: Props) { diff --git a/apps/web/src/components/layout/navbar.tsx b/apps/web/src/components/layout/navbar.tsx index 20993e1..26e1db1 100644 --- a/apps/web/src/components/layout/navbar.tsx +++ b/apps/web/src/components/layout/navbar.tsx @@ -65,6 +65,12 @@ export function Navbar() { > Review + + Telemetry + + ))} + + + {/* Iframe container */} + + + {/* Loading indicator */} + {!iframeLoaded && !iframeError && ( +
+
+
+

+ Loading telemetry dashboard... +

+
+
+ )} + + {/* Error state */} + {iframeError && ( +
+
+
⚠️
+

+ Failed to load telemetry dashboard +

+

+ The telemetry backend on orange VPS may be unreachable. + Ensure Tailscale is connected and the telemetry stack is + running. +

+
+
+ )} + + {/* Iframe */} +