Skip to content

feat(ui): customizable Home page with Quick Start and optional widgets - #2408

Open
sriaradhyula wants to merge 32 commits into
mainfrom
feat/customizable-home-page-quick-start
Open

feat(ui): customizable Home page with Quick Start and optional widgets#2408
sriaradhyula wants to merge 32 commits into
mainfrom
feat/customizable-home-page-quick-start

Conversation

@sriaradhyula

@sriaradhyula sriaradhyula commented Aug 19, 2026

Copy link
Copy Markdown
Member

Summary

  • Replace the fixed Home page with a hero prompt composer + a tabbed Quick Start section (Build / Automate / Connect / Explore), each card linking to the closest existing destination route — no new destination pages.
  • The previous Home sections (welcome banner, "Start Here" shortcuts, recent chats, insights, shared conversations) become individually addable/removable/reorderable widgets (drag-and-drop via @dnd-kit), persisted per-user (localStorage-first, best-effort sync to Mongo via the existing /api/settings/preferences route — no new backend route needed).
  • A "Go back to the previous Home experience" / "Try the new Home experience" toggle keeps the old fixed layout (ClassicHomePage) available during rollout, gated by a home_experience preference, so it can be retired once the new experience is validated.
  • The hero composer creates a conversation via the existing dual-mode chat-store action and hands the typed first message off through a one-shot pending-first-message module, picked up by ChatPanel's existing send pipeline rather than duplicating it. The agent picker reuses the existing AgentSelector component, defaulting to the resolved platform/user default agent.
  • RecentChats, SharedConversations, InsightsWidget, CapabilityCards, and WelcomeBanner were made self-contained (own data fetching) so they can be registered as zero-prop widgets. While browser-testing this, found and fixed a real bug: RecentChats' loading skeleton never cleared when the session was unauthenticated.
  • The Explore tab intentionally ships without the "Projects" card from the original design reference — its description named an internal Cisco/Outshift product, which can't appear in this public repo.

Screenshots

Light Dark
Customizable Home in Light theme Customizable Home in Dark theme

Test plan

  • npm run lint
  • npx tsc --noEmit
  • npm test (full suite, 7494 tests passing)
  • npm run build
  • Manually verified in a running dev server: hero composer renders and the agent picker correctly hides when no dynamic agents are configured; all four Quick Start tabs render their cards with correct links; adding/removing/reordering widgets persists across a reload (localStorage mode); the classic/new experience toggle switches layouts and persists; no console errors beyond the pre-existing 401s from this auth-less dev environment
  • Reviewer: exercise the hero composer's send flow end-to-end against a real dynamic-agent-configured environment (this dev environment has none configured, so the actual message-send path — reusing ChatPanel's existing pipeline — couldn't be exercised live, only unit-tested)
  • Reviewer: the "Create Schedules" Quick Start card links to /schedules, which has no in-page creation affordance today (schedules are created via an agent conversation) — may need a product decision on that card's expectation

🤖 Generated with Claude Code

WorkspaceBreadcrumbs on the chat page rendered in its own padded,
bordered block underneath AppHeader instead of inside it, leaving a
visible gap between the top bar and the "Home > Chat" trail. Add a
HeaderBreadcrumbSlot portal so AppHeader owns a slot in its row and
the chat layout portals its breadcrumb into it directly.

Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Port the header animations lost in the PR #2187 / admin-nav merge
conflict (tracked in issue #2191, closed without the reconciliation
happening):

- Sparkle pop-in on the rail/mobile brand hover, layered on top of the
  existing per-letter color-ease effect rather than replacing it.
- A framer-motion shared-layout pill behind the active rail nav item's
  icon badge, sliding between items on navigation instead of snapping.
  Scoped per render context (rail vs. drawer) via a context-suffixed
  layoutId so the two instances never fight each other.

Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Replace the fixed Home page with a hero prompt composer + a tabbed Quick
Start section (Build/Automate/Connect/Explore), with the previous
sections (welcome banner, Start Here shortcuts, recent chats, insights,
shared conversations) turned into individually addable/removable/
reorderable widgets, persisted per-user (localStorage + best-effort
Mongo sync via the existing /api/settings/preferences route).

A "Go back to the previous Home experience" / "Try the new Home
experience" toggle keeps the old fixed layout (ClassicHomePage)
available during rollout, gated by a home_experience preference, so it
can be removed once the new experience is validated.

- HeroComposer creates a conversation via the existing dual-mode
  chat-store action and hands off the typed first message through a
  one-shot pending-first-message module, picked up by ChatPanel's
  existing send pipeline rather than duplicating it.
- QuickStartSection's cards link to the closest existing destination
  route for each action (agents, MCP servers, skills, knowledge base,
  models, workflows, schedules, connections, secrets, chat) — no new
  destination pages.
- Widget add/remove/reorder (drag-and-drop via @dnd-kit) lives in
  home-widgets-store.ts, mirroring the existing feature-flag-store
  pattern (local-first, best-effort server sync, touched-state guard
  against late hydration clobbering a fresh interaction).
- RecentChats, SharedConversations, InsightsWidget, CapabilityCards,
  and WelcomeBanner were made self-contained (own data fetching) so
  they can be registered as zero-prop widgets; fixed a bug found while
  browser-testing where RecentChats' loading skeleton never cleared
  when the session was unauthenticated.

Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ No proprietary content detected. This PR is clear for review!

@github-actions github-actions Bot added the dev Normal PR to main; uses dev prerelease versioning label Aug 19, 2026
@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

🧪 CAIPE UI Test Results

All tests passed

🟡 Overall Coverage: 62%

Coverage
lines
statements
functions
branches

📊 Detailed Coverage

Metric Covered Total Percentage
Lines 41356 61130 67.65%
Statements 44164 67453 65.47%
Functions 7747 12724 60.88%
Branches 28066 50774 55.27%

✅ Test Suites

  • ✅ auth-guard.test.tsx - Route protection & authorization
  • ✅ token-expiry-guard.test.tsx - Token expiry handling
  • ✅ dynamic-agent-client.test.ts - Dynamic Agents streaming client
  • ✅ auth-utils.test.ts - Authentication utilities (100% coverage)
  • ✅ auth-config.test.ts - OIDC configuration
📈 Coverage Thresholds
Threshold Target Current Status
Minimum 40% 62% ✅ Pass
Good 60% 62% ✅ Pass
Excellent 80% 62% ⚠️ Below target
⚠️ Areas Needing Tests

High Priority:

  • lib/streaming/* - Core stream event handling
  • store/chat-store.ts - Chat state management
  • store/agent-skills-store.ts - Agent skills
  • lib/api-client.ts - API communication
  • lib/storage-mode.ts - MongoDB/localStorage switching

Medium Priority:

  • components/chat/ChatPanel.tsx - Main chat interface
  • components/agent-builder/* - Agent builder UI
  • lib/mongodb.ts - MongoDB integration

💡 Run locally: make caipe-ui-tests
📦 Full report: Check workflow artifacts

Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
Signed-off-by: Sri Aradhyula <sraradhy@cisco.com>
@github-actions

Copy link
Copy Markdown
Contributor

ℹ️ Branch is behind main (advisory, non-blocking)

Commit: 03082b2b

This branch does not yet contain the latest main. This does not fail the version-bump check — version files are bumped once the branch is updated, and GitHub branch protection still requires the branch to be up to date before merge. Use the Update branch button on this PR, or run:

git fetch origin main
git checkout feat/customizable-home-page-quick-start
git merge FETCH_HEAD
git push

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dev Normal PR to main; uses dev prerelease versioning

Projects

Development

Successfully merging this pull request may close these issues.

1 participant