Skip to content

Adopt @ferrlabs/ui-react in every product app #59

Description

@BryanFRD

Context

The org-wide CLAUDE.md mandates that every product app's visual primitives come from @ferrlabs/ui-react (and @ferrlabs/ui-astro for marketing sites). No local Button, Card, Sidebar, Modal when an equivalent ships upstream.

Today, 0 of 5 product apps consume @ferrlabs/ui-react. Each has its own primitive family:

App Local family Files using it
FerrFleet-Cloud (FerrAgents) AgtCard, AgtChip, AgtChrome, AgtTabHeader 12+
FerrVault-Cloud VltCard, VltButton, VltChip, Vault.tsx 8+
FerrTrack-Cloud local primitives TBD
FerrGrowth-Cloud local primitives TBD
FerrLens-Cloud (Astro SSR — uses ui-astro?) TBD

Why this matters

  • Brand drift: each product diverges from the design tokens
  • Bug fix multiplier: a a11y fix or RTL fix has to land N times
  • Onboarding cost: every new contributor learns N primitive APIs

Sub-issues to spawn (1 per app)

  • FerrLabs/FerrFleet-Cloud — migrate app/ from AgtChrome.* to @ferrlabs/ui-react
  • FerrLabs/FerrVault-Cloud — migrate app/ from Vault.* to @ferrlabs/ui-react
  • FerrLabs/FerrTrack-Cloud — migrate app/ to @ferrlabs/ui-react
  • FerrLabs/FerrGrowth-Cloud — migrate app/ to @ferrlabs/ui-react
  • FerrLabs/FerrLens-Cloud — confirm @ferrlabs/ui-astro usage on site/

Each migration is sizeable (~1 sprint per app). Recommend doing them in dependency order: FerrFleet first (fewest screens), then FerrVault, then FerrTrack/FerrGrowth.

Pre-work

  • For each missing primitive in the lib, add it upstream first (in FerrLabs/UI), release, then consume.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions