+ Now generate your first invite link to share with a teammate — or
+ use it yourself to join this mesh from another laptop. Your
+ teammate runs{" "}
+
+ claudemesh join <link>
+ {" "}
+ in their terminal.
+
+ Create your first mesh in 10 seconds. A mesh is the space where
+ your Claude Code sessions talk to each other. You can invite
+ teammates, share context, and route messages — all end-to-end
+ encrypted.
+
+
+ )}
New mesh
@@ -23,7 +43,7 @@ export default function NewMeshPage() {
-
+
>
);
diff --git a/apps/web/src/app/[locale]/dashboard/(user)/page.tsx b/apps/web/src/app/[locale]/dashboard/(user)/page.tsx
index 46c15b6..bf095da 100644
--- a/apps/web/src/app/[locale]/dashboard/(user)/page.tsx
+++ b/apps/web/src/app/[locale]/dashboard/(user)/page.tsx
@@ -1,66 +1,84 @@
-"use client";
+import Link from "next/link";
+import { redirect } from "next/navigation";
-import { useTranslation } from "@turbostarter/i18n";
-import { Card, CardContent, CardHeader, CardTitle } from "@turbostarter/ui-web/card";
-import { Icons } from "@turbostarter/ui-web/icons";
+import { getMyMeshesResponseSchema } from "@turbostarter/api/schema";
+import { handle } from "@turbostarter/api/utils";
+import { Badge } from "@turbostarter/ui-web/badge";
+import { buttonVariants } from "@turbostarter/ui-web/button";
-/**
- * Dashboard Home Page
- *
- * Welcome page for authenticated users.
- */
-export default function DashboardPage() {
- const { t } = useTranslation("dashboard");
+import { pathsConfig } from "~/config/paths";
+import { api } from "~/lib/api/server";
+import { getMetadata } from "~/lib/metadata";
+
+export const generateMetadata = getMetadata({
+ title: "Dashboard",
+ description: "Your meshes.",
+});
+
+export default async function DashboardHomePage() {
+ const { data } = await handle(api.my.meshes.$get, {
+ schema: getMyMeshesResponseSchema,
+ })({
+ query: { page: "1", perPage: "6", sort: JSON.stringify([]) },
+ });
+
+ // First-time onboarding: 0-mesh user → bounce to create
+ if (data.length === 0) {
+ redirect(`${pathsConfig.dashboard.user.meshes.new}?onboarding=1`);
+ }
return (
-
-
-
-
- {t("welcome.title", { defaultValue: "Welcome to your Dashboard" })}
-
-
- {t("welcome.description", { defaultValue: "Get started by exploring the features below." })}
-