Skip to content

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

@BryanFRD

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions