From b7744a221575a8eb1174a459f0496897c4b3ec13 Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 11 Mar 2026 11:40:38 -0500 Subject: [PATCH 01/12] Add direct onboarding routes Co-Authored-By: Paperclip --- ui/src/App.tsx | 55 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/ui/src/App.tsx b/ui/src/App.tsx index ed6c9c51..1cfdd9df 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from "react"; -import { Navigate, Outlet, Route, Routes, useLocation } from "@/lib/router"; +import { Navigate, Outlet, Route, Routes, useLocation, useParams } from "@/lib/router"; import { useQuery } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { Layout } from "./components/Layout"; @@ -108,6 +108,7 @@ function boardRoutes() { <> } /> } /> + } /> } /> } /> } /> @@ -164,6 +165,57 @@ function LegacySettingsRedirect() { return ; } +function OnboardingRoutePage() { + const { companies, loading } = useCompany(); + const { onboardingOpen, openOnboarding } = useDialog(); + const { companyPrefix } = useParams<{ companyPrefix?: string }>(); + const opened = useRef(false); + const matchedCompany = companyPrefix + ? companies.find((company) => company.issuePrefix.toUpperCase() === companyPrefix.toUpperCase()) ?? null + : null; + + useEffect(() => { + if (loading || opened.current || onboardingOpen) return; + opened.current = true; + if (matchedCompany) { + openOnboarding({ initialStep: 2, companyId: matchedCompany.id }); + return; + } + openOnboarding(); + }, [companyPrefix, loading, matchedCompany, onboardingOpen, openOnboarding]); + + const title = matchedCompany + ? `Add another agent to ${matchedCompany.name}` + : companies.length > 0 + ? "Create another company" + : "Create your first company"; + const description = matchedCompany + ? "Run onboarding again to add an agent and a starter task for this company." + : companies.length > 0 + ? "Run onboarding again to create another company and seed its first agent." + : "Get started by creating a company and your first agent."; + + return ( +
+
+

{title}

+

{description}

+
+ +
+
+
+ ); +} + function CompanyRootRedirect() { const { companies, selectedCompany, loading } = useCompany(); const { onboardingOpen } = useDialog(); @@ -242,6 +294,7 @@ export function App() { }> } /> + } /> } /> }> } /> From d4d1b2e7f924c60d999719846b807aa38408ee27 Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 11 Mar 2026 12:02:27 -0500 Subject: [PATCH 02/12] Style tweaks for onboarding wizard step 1 - Set animation panel (right half) background to #1d1d1d - Add more margin above Company name form label - Make form labels white when input is focused or has value using Tailwind group/focus-within pattern Co-Authored-By: Paperclip Co-Authored-By: Claude Opus 4.6 --- ui/src/components/OnboardingWizard.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx index a043655f..31373344 100644 --- a/ui/src/components/OnboardingWizard.tsx +++ b/ui/src/components/OnboardingWizard.tsx @@ -593,8 +593,8 @@ export function OnboardingWizard() {

-
-