From fa99caf00a690c2cbc7bd9728edff83bf5fbea14 Mon Sep 17 00:00:00 2001 From: Connor Needham <129120300+ConnorNeed@users.noreply.github.com> Date: Sat, 18 Jul 2026 06:23:24 +0000 Subject: [PATCH] feat: style home page + unique tab labels + launch link from home + AP links from home --- README.md | 2 +- src/app/dashboard/MosaicDashboardClient.tsx | 12 +++ src/app/dashboard/page.tsx | 18 ++--- src/app/launch/ContainerListClient.tsx | 12 +++ src/app/launch/page.tsx | 12 +-- src/app/layout.tsx | 2 +- src/app/page.tsx | 83 +++++++++++++++++++-- src/components/Layout.tsx | 2 +- 8 files changed, 119 insertions(+), 24 deletions(-) create mode 100644 src/app/dashboard/MosaicDashboardClient.tsx create mode 100644 src/app/launch/ContainerListClient.tsx diff --git a/README.md b/README.md index 612c71c..b88c086 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ROS2 Offline Dashboard +# CPRT WebUI A web dashboard for monitoring and interacting with your ROS2-powered rover. This dashboard integrates various panels—including a map view, telemetry, video stream, node manager, waypoint list, and more—using a Mosaic layout for a flexible, modular experience. diff --git a/src/app/dashboard/MosaicDashboardClient.tsx b/src/app/dashboard/MosaicDashboardClient.tsx new file mode 100644 index 0000000..f48e3a0 --- /dev/null +++ b/src/app/dashboard/MosaicDashboardClient.tsx @@ -0,0 +1,12 @@ +"use client"; + +import dynamic from "next/dynamic"; + +const MosaicDashboard = dynamic( + () => import("@/components/panels/MosaicDashboard"), + { ssr: false } +); + +export default function MosaicDashboardClient() { + return ; +} \ No newline at end of file diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index c92830f..aec256e 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,16 +1,16 @@ -"use client"; - -import dynamic from 'next/dynamic'; import Layout from '@/components/Layout'; +import type { Metadata } from "next"; +import MosaicDashboardClient from "./MosaicDashboardClient"; -const MosaicDashboard = dynamic(() => import('@/components/panels/MosaicDashboard'), { ssr: false }); +export const metadata: Metadata = { + title: "Dashboard - CPRT webUI", + description: "Carleton Planetary Robotics Team's ROS2 Web Interface", +}; -const Dashboard = () => { +export default function Dashboard() { return ( - + ); -}; - -export default Dashboard; +} \ No newline at end of file diff --git a/src/app/launch/ContainerListClient.tsx b/src/app/launch/ContainerListClient.tsx new file mode 100644 index 0000000..386258c --- /dev/null +++ b/src/app/launch/ContainerListClient.tsx @@ -0,0 +1,12 @@ +"use client"; + +import dynamic from "next/dynamic"; + +const ContainerList = dynamic( + () => import("@/components/ContainerList"), + { ssr: false } +); + +export default function ContainerListClient() { + return ; +} \ No newline at end of file diff --git a/src/app/launch/page.tsx b/src/app/launch/page.tsx index 6d238bc..e4848cc 100644 --- a/src/app/launch/page.tsx +++ b/src/app/launch/page.tsx @@ -1,15 +1,17 @@ -'use client'; - import Layout from "../../components/Layout"; +import type { Metadata } from "next"; import { Toaster } from "react-hot-toast"; -import dynamic from 'next/dynamic'; +import ContainerListClient from "./ContainerListClient"; -const ContainerListPage = dynamic(() => import("../../components/ContainerList"), { ssr: false }); +export const metadata: Metadata = { + title: "Launch - CPRT webUI", + description: "Carleton Planetary Robotics Team's ROS2 Web Interface", +}; export default function Launch() { return ( - + ); diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a9f2f92..1c803b9 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -17,7 +17,7 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "BOB ROS2", + title: "CPRT webUI", description: "Carleton Planetary Robotics Team's ROS2 Web Interface", }; diff --git a/src/app/page.tsx b/src/app/page.tsx index d226165..e36b401 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -116,33 +116,102 @@ const HomePage = () => { return (
- {names.map((name, idx) => ( - {name} - ))} +
+

Dashboard Presets

+ +
+ {names.map((name, idx) => ( + + {name} + + ))} +
+
+ +
+

Tools

+ + + Launch + + + Base Station AP + + + Rover AP + +
- @@ -150,4 +219,4 @@ const HomePage = () => { ); }; -export default HomePage; +export default HomePage; \ No newline at end of file diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 34b5584..c7ae316 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -13,7 +13,7 @@ const Layout: React.FC = ({ children }) => {