"use client"; import { motion } from "motion/react"; import { Activity, MonitorCheck, BookOpen, BarChart3, ArrowUpRight, Hexagon, Zap, Shield, Server, } from "lucide-react"; import { useI18n } from "@/lib/i18n"; /* ═══════════════════════════════════════════════════════ Configure service URLs here. Change these to your actual endpoints. ═══════════════════════════════════════════════════════ */ const SERVICES = [ { key: "monitoring" as const, icon: MonitorCheck, accentVar: "--portal-accent-green", glowColor: "rgba(52,211,153,0.15)", decorIcon: Shield, }, { key: "docs" as const, icon: BookOpen, accentVar: "--portal-accent-violet", glowColor: "rgba(139,92,246,0.15)", decorIcon: Hexagon, }, { key: "analytics" as const, icon: BarChart3, accentVar: "--portal-accent-cyan", glowColor: "rgba(0,229,255,0.15)", decorIcon: Zap, }, ]; const SERVICE_URLS: Record = { monitoring: "http://192.168.111.90:8018", docs: "http://192.168.111.90:8017", analytics: "http://192.168.111.90:8019", }; export default function PortalPage() { const { t } = useI18n(); const i18nMap: Record = { monitoring: { title: t("portal.monitoring"), desc: t("portal.monitoringDesc") }, docs: { title: t("portal.docs"), desc: t("portal.docsDesc") }, analytics: { title: t("portal.analytics"), desc: t("portal.analyticsDesc") }, }; return (
{/* ── Background layers ── */}
{/* Decorative floating particles */}
{Array.from({ length: 6 }).map((_, i) => (
))}
{/* ── Header / Branding ── */} {/* Logo mark */}

Sino Code

{t("portal.subtitle")} {/* Animated scan divider */}
{/* ── Service Cards ── */}
{SERVICES.map((service, i) => { const Icon = service.icon; const DecorIcon = service.decorIcon; const info = i18nMap[service.key]; const url = SERVICE_URLS[service.key]; return ( {/* Corner brackets */} {/* Decorative bg icon */} {/* Icon container */}
{/* Text content */}

{info.title}

{info.desc}

{/* Enter indicator */}
{t("portal.enter")}
{/* Bottom highlight bar */}
); })}
{/* ── Footer status ── */}
System Online
); }