Parallel analysis lane
Explore the frontend app at /home/akitav2/projects/4626/frontend to survey the design system and dependencies available for a UI redesign. Report:
- /home/akitav2/projects/4626/frontend/package.json dependencies: confirm presence/absence of framer-motion (or motion), @tanstack/react-query, zod, tailwindcss (version), radix packages, class-variance-authority, lucide-react, sonner or other toast libraries.
- The components in /home/akitav2/projects/4626/frontend/src/components/ui/ — list them (Button, Card, Badge, Tooltip, Accordion, Collapsible, etc.) and note the styling approach (CSS vars like --vault-*, btn-accent).
- Read /home/akitav2/projects/4626/frontend/docs/ui-design-system.md if it exists and summarize the key conventions (tokens, button variants, chart libs, what's forbidden).
- Tailwind config location and any custom theme tokens / CSS variables defined (look at tailwind config and global CSS like index.css or app.css for --vault-* vars, dark mode setup).
- Whether there's an existing toast system in use (which one, how invoked).
- Whether there's an existing Tooltip/Accordion/Disclosure primitive already used in app pages.
- Any existing components that already do: address truncation + copy, status badges/pills, explorer links (search for "Basescan", "basescan.org", "shortenAddress", "truncate" helpers, "CopyButton" across src/).
Medium thoroughness. Return a structured report with file paths.
Analysis
Surveying the frontend design system: checking dependencies, UI components, and styling conventions.
[REDACTED]
Tools invoked: UpdateCurrentStep, Read, Glob, Read, Glob, Grep
Analysis
[REDACTED]
Tools invoked: Read, Read, Read, Read, Grep, Grep, Grep
Analysis
[REDACTED]
Tools invoked: Read, Read, Read, Read, Grep, Grep, Grep, Read
Analysis
[REDACTED]
Tools invoked: Read, Read, Read, Grep, Grep, Grep, Grep
Analysis
[REDACTED]
Tools invoked: Read, Grep, Read, Read, Grep, Grep, Read
Analysis
[REDACTED]
Tools invoked: Grep, Grep, Read, Read, Read, Grep
Analysis
[REDACTED]
Tools invoked: Read, Read, Grep, Read
Analysis
[REDACTED]
Tools invoked: UpdateCurrentStep
Analysis
Frontend design system survey
Baseline for a UI redesign in /home/akitav2/projects/4626/frontend.
1. package.json dependencies
File: /home/akitav2/projects/4626/frontend/package.json
| Package | Status | Version |
|---|---|---|
| framer-motion | Present | ^12.33.0 |
| motion (Motion One) | Absent | — |
| @tanstack/react-query | Present | ^5.90.20 |
| zod | Present | ^4.3.6 |
| tailwindcss | Present (devDep) | ^4.1.18 via @tailwindcss/vite |
| class-variance-authority | Present | ^0.7.1 |
| clsx + tailwind-merge | Present | ^2.1.1 / ^3.6.0 |
| lucide-react | Present | ^0.563.0 |
| sonner | Present | ^2.0.7 |
| react-hot-toast | Absent | — |
Radix UI (direct deps):
@radix-ui/react-accordion^1.2.12@radix-ui/react-dialog^1.1.15@radix-ui/react-label^2.1.8@radix-ui/react-slot^1.2.4@radix-ui/react-tooltip^1.2.8
Not in direct deps (transitive only): @radix-ui/react-collapsible appears in pnpm-lock.yaml but is not a top-level dependency.
Related UI/animation/chart libs:
recharts^3.8.1(primary chart lib per design doc)gsap+@gsap/react(scroll/immersive)lightweight-charts,vega,vega-lite(specialized charts)react-icons^5.6.0(alongside lucide)@coinbase/cds-*— removed (forbidden in app code per design doc)
2. src/components/ui/ inventory
Directory: /home/akitav2/projects/4626/frontend/src/components/ui/ (18 files)
| Component | File | Notes |
|---|---|---|
| Button | Button.tsx | CVA + Radix Slot; primary → .btn-accent, secondary → .btn-secondary |
| Badge | Badge.tsx | CVA variants: default, success, warning, error, info, canonical, eoa, muted |
| Modal | Modal.tsx | Radix Dialog |
| Input | Input.tsx | Radix Label + vault tokens |
| Alert | Alert.tsx | — |
| Tooltip | Tooltip.tsx | Radix Tooltip + TooltipProvider |
| Accordion | Accordion.tsx | FaqAccordion (multi) + SingleAccordion (single collapsible) |
| Tabs | Tabs.tsx | SegmentedTabs (custom, not Radix Tabs) |
| Toast | Toast.tsx | Sonner wrapper (AppToaster, toast.*) |
| Spinner | Spinner.tsx | — |
| Skeleton | Skeleton.tsx | — |
| LoadingState | LoadingState.tsx | — |
| PixelWaveLoader | PixelWaveLoader.tsx | Brand loading animation |
| StepIndicator | StepIndicator.tsx | — |
| AccountTray | AccountTray.tsx | Account chrome |
| AccountModeIndicator | AccountModeIndicator.tsx | — |
| WalletProviderIcon | WalletProviderIcon.tsx | — |
Not in ui/ (but used as surfaces):
- No
Card.tsx— surfaces use CSS classes:.card,.glass-card,.vault-surface,.vault-surface-muted,.vault-surface-elevated,.bv-panel - No
Collapsible.tsx— native<details>or Radix Accordion elsewhere
Styling approach:
- CVA for
Button/Badge(class-variance-authority) - CSS utility classes for primary CTAs:
.btn-accent,.btn-primary,.btn-secondary,.btn-no-iconin/home/akitav2/projects/4626/frontend/src/index.css - Tailwind semantic tokens:
text-vault-text,bg-vault-card,border-vault-borderStrong,text-brand-primary, etc. cn()helper from@/lib/shared/utils(clsx + tailwind-merge)
3. docs/ui-design-system.md summary
File: /home/akitav2/projects/4626/frontend/docs/ui-design-system.md
Mental model: Product UI = @/components/ui/* (shadcn/Radix + 4626 Tailwind tokens).
Tokens:
- Brand/surfaces: CSS vars in
src/index.css(--brand-primary,--vault-*) - shadcn semantic colors bridged in
html.dark+@theme inline(no duplicate hex)
Default components for new UI:
Button,Badge,Modal,Input,Alert,SegmentedTabsMetricChartPlot+ Recharts for Explore chartsAccountTrayfor account chromesonnerviaAppToaster+toast.*
Forbidden / boundaries:
src/components/uimust not import fromsrc/features/*(pnpm guard:frontend-boundaries)- No runtime
@coinbase/cds-*in app code - Charts: Recharts only (not CDS)
- Do not use raw
btn-*classes on new surfaces — use<Button>variants
4. Tailwind config & theme tokens
Tailwind config: /home/akitav2/projects/4626/frontend/tailwind.config.js
Global CSS: /home/akitav2/projects/4626/frontend/src/index.css
Brand preset: /home/akitav2/projects/4626/frontend/packages/brand-kit/tailwind.preset.js
Tailwind v4 setup:
@import "tailwindcss"+@config "../tailwind.config.js"inindex.css- DevDep:
tailwindcss^4.1.18,@tailwindcss/vite^4.1.18
Dark mode: darkMode: 'class' — html.dark toggles theme (default :root is light; app is predominantly dark)
Key CSS variables (index.css ~606–658):
:root / html.dark {
--brand-primary, --brand-hover, --brand-accent-rgb, --brand-gold, --brand-gold-light
--vault-bg, --vault-card, --vault-card-raised
--vault-border, --vault-border-strong
--vault-text, --vault-subtext, --vault-muted
}
html.dark {
/* shadcn bridge */
--background, --foreground, --card, --primary, --destructive, --ring, --radius, ...
}
@theme inline block maps shadcn tokens to Tailwind color utilities (--color-background, --color-primary, etc.).
Tailwind theme.extend extras (tailwind.config.js):
colors.brand.*,colors.vault.*,colors.uniswap,obsidian,basalt,tension,copper,magma,signal- Custom animations (
fade-in,shimmer,pulse-glow, etc.) - Font families:
sans(Inter),display(Space Grotesk),mono(JetBrains Mono)
Surface CSS classes (not React components): .vault-pill, .bv-chip, .bv-kicker, .status-active, .glass-card, .explore-table-panel, etc.
5. Toast system
Library: Sonner
Wrapper: /home/akitav2/projects/4626/frontend/src/components/ui/Toast.tsx
AppToaster— dark theme, bottom-right, vault-styled classNamestoast.success(),toast.error(),toast.warning(),toast.info(),toast.dismiss(), etc.- Legacy alias:
CdsToastBridge→AppToaster
Mounted at app root: /home/akitav2/projects/4626/frontend/src/main.tsx (inside TooltipProvider)
Invocation pattern:
import { toast } from '@/components/ui/Toast'
toast.success('...')
toast.error('...')
Used in: Vault.tsx, ChatWidget.tsx, ChatAvailabilityRail.tsx, AlfaClubLiquidity.tsx, ArchB* cards, useAutoProvisionSubAccount.ts, AccountSetupWorkspaceView.tsx, and others.
Exception: AdminCreatorStrategyProvisioning.tsx uses a local inline toast state (not Sonner).
6. Tooltip / Accordion / Disclosure usage
Tooltip (Radix via @/components/ui/Tooltip)
- Provider:
TooltipProviderinmain.tsx(wraps entire app) - Consumers:
/home/akitav2/projects/4626/frontend/src/components/swap/SwapRoutePopover.tsx/home/akitav2/projects/4626/frontend/src/components/explore/ExploreUnfurlDebugCopy.tsx
Accordion (Radix via @/components/ui/Accordion)
FaqAccordion—/home/akitav2/projects/4626/frontend/src/pages/Faq.tsxSingleAccordion—/home/akitav2/projects/4626/frontend/src/components/cca/AuctionFAQ.tsx
Disclosure / collapsible (non-Radix)
Widespread native <details> / custom accordion patterns:
AccountSetupWorkspaceView.tsx— waitlist step accordionWaitlistLeaderboardPanel.tsx— mobile collapsible leaderboardDeployVault.tsx,CcaAuctionPanel.tsx,CreatorStrategyFeatures.tsx,Status.tsx,YourIdentityHero.tsx, admin pages
No dedicated Collapsible UI primitive in components/ui/.
7. Address truncation, copy, status badges, explorer links
Address truncation helpers
| Helper | Location | Format |
|---|---|---|
truncateAddress() | /home/akitav2/projects/4626/frontend/src/lib/xmtp/xmtpHelpers.ts | 0x1234…5678 (6 + 4) |
formatShort() (local) | /home/akitav2/projects/4626/frontend/src/components/account/CopyableAddress.tsx | Same pattern |
Local truncateAddress() | ChatWindow.tsx, ChatBar.tsx | Duplicated inline |
No global shortenAddress export found; truncation is localized or via xmtpHelpers.truncateAddress.
Copy components
| Component | Path | Role |
|---|---|---|
CopyableAddress | /home/akitav2/projects/4626/frontend/src/components/account/CopyableAddress.tsx | Truncated address + copy; optional ENS/Basename label; variants default / muted / pill |
InlineAddressCopyButton | Same file | Compact copy icon beside a label |
ExploreCopyButton | /home/akitav2/projects/4626/frontend/src/components/explore/ExploreUiPrimitives.tsx | Generic copy-any-text button |
Consumers: YourIdentityHero.tsx, CanonicalIdentityCard.tsx, ExecutionScopeCard.tsx, AccountsManagementPanel.tsx, ExploreCreatorDetail.tsx, ExploreContentDetail.tsx
Explorer / Basescan links
| Source | Path |
|---|---|
SUPPORTED_CHAINS[].explorerUrl | /home/akitav2/projects/4626/frontend/src/config/chains.ts (https://basescan.org for Base) |
basescanTxUrl() | /home/akitav2/projects/4626/frontend/src/lib/account/trayActivity.ts |
| Inline literals | Widespread: DeployVault.tsx, ExploreCreatorDetail.tsx, ExploreContentDetail.tsx, ChatWindow.tsx, CcaAuctionPanel.tsx, AddOwnerBaseApp.tsx, AmoeEntryCard.tsx, AgentDirectory.tsx, adminOpsHelpers.ts, etc. |
Pattern: `https://basescan.org/address/${addr}` or `/tx/${hash}` — often with Basescan icon assets on Explore pages.
Status badges / pills
| Pattern | Location |
|---|---|
<Badge> (CVA) | Swap, ArchB, workspace tabs |
.vault-pill / .bv-chip (CSS) | DeployVault.tsx, Vault.tsx, DeployCoin.tsx |
StatusBadge (local) | AdminAgentSetup.tsx, AdminWaitlist.tsx |
EthosScorePill | /home/akitav2/projects/4626/frontend/src/components/chat/EthosScorePill.tsx — reputation score pill |
InfraReadinessBadges | /home/akitav2/projects/4626/frontend/src/features/status/InfraReadinessBadges.tsx — custom pills on /status |
Redesign implications (quick takeaways)
- Stack is modern and cohesive: Tailwind v4 + CVA + Radix + Sonner + TanStack Query + Zod + framer-motion are all in place.
- Use
@/components/ui/*and<Button>— avoid rawbtn-*and CDS. - No
Cardprimitive — either add one or keep.vault-surface/.glass-cardpatterns. - Reuse copy/explorer patterns:
CopyableAddress,ExploreCopyButton,chains.tsexplorer URLs,basescanTxUrl(). - Disclosure is fragmented — Radix Accordion on FAQ/CCA; waitlist/admin use
<details>; consider unifying for redesign. - Motion: framer-motion is heavily used; GSAP for scroll/immersive — both available.
- Charts:
MetricChartPlot(Recharts) is the canonical Explore chart; other chart libs exist for specialized surfaces.
[REDACTED]
Was this page helpful?