Skip to content

feat(web): migrate all icons to Font Awesome Pro - #64

Merged
tyrelchambers merged 1 commit into
masterfrom
feature/fontawesome-icons
Jul 18, 2026
Merged

feat(web): migrate all icons to Font Awesome Pro#64
tyrelchambers merged 1 commit into
masterfrom
feature/fontawesome-icons

Conversation

@tyrelchambers

Copy link
Copy Markdown
Owner

What

Replaces every lucide-react icon in apps/web (~200 distinct icons across 176 files) with Font Awesome Pro from the @awesome.me/kit-6050953220 kit, rendered via <FontAwesomeIcon>. lucide-react is removed as a dependency.

How

  • Runtime sizing: FA core CSS is imported in index.css via @import "…/styles.css" layer(base); and config.autoAddCss = false in main.tsx, so Tailwind size-* utilities still control icon size (FA otherwise sizes to 1em).
  • Verified name map: a lucide→FA map (205 entries) was validated against the kit's actual exports before any edit; numeric size={N}size-[Npx], strokeWidth dropped, color="x"style.
  • Data-driven icons store an IconDefinition (not a component) and render via <FontAwesomeIcon icon={def} />; icon-typed fields use IconDefinition.
  • Brand marks (aws/gcp/azure/kubernetes/docker cluster tiles) stay react-icons — the FA Pro kit ships no brand family — behind a shared <ClusterIcon> helper.
  • Executed as a divide-and-conquer fan-out (8 batch agents + 3 cleanup agents) with a central typecheck/build/test reconciliation.

Security

  • .npmrc (committed) carries only the FA registry mappings. The auth token lives in ~/.npmrc / a CI secret — never committed and never bundled (it's install-time only).

Verification

  • pnpm --filter web typecheck — clean
  • pnpm --filter web build — clean (kit imports resolve, CSS layer works)
  • pnpm --filter web test1738 passed

🤖 Generated with Claude Code

Replace every lucide-react icon (~200 distinct across 166 files) with Font Awesome
Pro from the @awesome.me/kit-6050953220 kit, rendered via <FontAwesomeIcon>.
lucide-react is removed entirely.

- Runtime: FA core CSS imported in index.css `layer(base)` + config.autoAddCss=false
  in main.tsx so Tailwind size-* utilities still control icon sizing.
- Data-driven icons store IconDefinition (not components) and render via
  FontAwesomeIcon; icon-typed fields use IconDefinition.
- Cluster brand marks (aws/gcp/azure/kubernetes/docker) stay react-icons via a
  shared <ClusterIcon> helper — the FA Pro kit has no brand family.
- .npmrc carries the FA registry mappings only (token lives in ~/.npmrc / CI secret,
  never committed and never bundled).
- Tests query FA icons via [data-icon=...] instead of .lucide-*.

Verified: web typecheck clean, production build clean, full suite green (1738).
@tyrelchambers
tyrelchambers marked this pull request as ready for review July 18, 2026 03:35
@tyrelchambers
tyrelchambers merged commit 8b7090a into master Jul 18, 2026
1 check passed
tyrelchambers added a commit that referenced this pull request Jul 19, 2026
The FA Pro migration (#64) added @fortawesome/@awesome.me packages on the
private npm.fontawesome.com registry; the release install 401s without a
token. Load it from 1Password (same service account as macOS signing) on
every runner and write it to .npmrc before pnpm install.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant