feat: unified Skills Hub — merge analytics + marketplace into one page

Combines SkillsAnalytics (496 LOC) and SkillMarketplace (346 LOC) into
a single tabbed Skills Hub (770 LOC total, -9% code).

New structure:
- skills/shared.tsx: ProficiencyBadge, GapIndicator, constants (extracted)
- skills/OverviewTab.tsx: KPI cards, top 10 table, distribution chart, export
- skills/SearchTab.tsx: skill search + proficiency + availability filter
- skills/GapsTab.tsx: supply vs demand table with gap indicators
- skills/PeopleFinderTab.tsx: multi-rule AND/OR builder, chapter filter, export
- SkillsHub.tsx: tabbed container with URL-persisted tab state (?tab=)

Routing:
- /analytics/skills renders SkillsHub (was SkillsAnalytics)
- /analytics/skill-marketplace redirects to /analytics/skills?tab=search
- Sidebar: "Skill Marketplace" removed, renamed to "Skills Hub"

No API changes — reuses existing queries with conditional fetching per tab.
Full dark theme support on all components.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-03-22 21:33:21 +01:00
parent 1f4c230b8b
commit c7b76e086d
10 changed files with 901 additions and 272 deletions
@@ -1,5 +1,5 @@
import { SkillMarketplace } from "~/components/analytics/SkillMarketplace.js";
import { redirect } from "next/navigation";
export default function SkillMarketplacePage() {
return <SkillMarketplace />;
redirect("/analytics/skills?tab=search");
}
@@ -1,5 +1,5 @@
import { SkillsAnalytics } from "~/components/analytics/SkillsAnalytics.js";
import { SkillsHub } from "~/components/analytics/SkillsHub.js";
export default function SkillsAnalyticsPage() {
return <SkillsAnalytics />;
export default function SkillsHubPage() {
return <SkillsHub />;
}