Skip to content

Recruit S0.1: nav tab + empty view behind a feature flag (FHR-70)#91

Merged
matthewod11-stack merged 1 commit into
mainfrom
matthew/fhr-70-recruit-s01-recruiting-nav-tab-empty-view-behind-a-feature
May 26, 2026
Merged

Recruit S0.1: nav tab + empty view behind a feature flag (FHR-70)#91
matthewod11-stack merged 1 commit into
mainfrom
matthew/fhr-70-recruit-s01-recruiting-nav-tab-empty-view-behind-a-feature

Conversation

@matthewod11-stack
Copy link
Copy Markdown
Owner

Recruit S0.1 — first seam for the Recruit module

Linear: FHR-70

Adds a recruiting nav tab + empty RecruitingView, gated behind a compile-time RECRUITING_ENABLED flag (default off). This is the walking-skeleton seam that S0.2 (Rust recruiting module) and S0.3 (live Exa round-trip) attach to.

Behavior

  • Flag off (default / shipped): UI unchanged — Rollup tree-shakes the recruiting code out of the production bundle entirely.
  • Flag on: a third sidebar tab ("Recruit") renders an empty Recruiting view in the main content area.

Changes

  • src/lib/featureFlags.ts (new)RECRUITING_ENABLED compile-time gate
  • src/components/recruiting/ (new) — empty RecruitingView (lazy-loaded) + barrel
  • src/contexts/LayoutContext.tsxSidebarTab += 'recruiting'
  • src/components/conversations/TabSwitcher.tsx — flag-gated tab
  • src/components/layout/AppShell.tsx — three-case sidebar content
  • src/App.tsx — main-area swap to <RecruitingView>

Verification

  • npm run type-check clean (both flag states)
  • npm run build clean (flag on & off)
  • 478 Rust tests unchanged (0 Rust touched)
  • Empty view confirmed live in the dev app

Decisions (see DECISIONS.md)

  • Compile-time constant flag over a settings-backed toggle (nothing to toggle yet; tree-shakes out when off)
  • Main-area placement over sidebar (seam matches where S0.2/S0.3 land)

🤖 Generated with Claude Code

First visible seam for the Recruit module (FHR-70 / Recruit S0.1). A
`recruiting` tab — gated by a compile-time RECRUITING_ENABLED flag, default
off — renders an empty RecruitingView in the main content area. With the
flag off, Rollup tree-shakes the recruiting code out of the bundle, so this
ships dark to production while S0.2/S0.3 build against the seam.

- src/lib/featureFlags.ts (new): RECRUITING_ENABLED compile-time gate
- src/components/recruiting/ (new): empty RecruitingView, lazy-loaded + barrel
- LayoutContext: SidebarTab union += 'recruiting'
- TabSwitcher: flag-gated Recruit tab
- AppShell: three-case sidebar content
- App.tsx: swap main area to <RecruitingView> when the tab is active

Verified: tsc clean (both flag states), build clean on/off, 478 Rust tests
unchanged. Decisions in DECISIONS.md: compile-time flag over settings toggle;
main-area placement over sidebar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 22, 2026 20:08
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces the first UI “seam” for a future Recruit module by adding a new sidebar tab (recruiting) and an empty RecruitingView, gated behind a compile-time RECRUITING_ENABLED flag (default off) so the feature ships dark.

Changes:

  • Adds a compile-time feature-flag constant (RECRUITING_ENABLED) for gating in-development modules.
  • Introduces a new (lazy-loaded) RecruitingView skeleton and wires it into the main content area when the “Recruit” tab is active.
  • Extends the layout tab state/type to include recruiting and updates the sidebar switcher + shell rendering accordingly.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/lib/featureFlags.ts Adds the compile-time RECRUITING_ENABLED gate.
src/contexts/LayoutContext.tsx Extends SidebarTab with 'recruiting'.
src/components/recruiting/RecruitingView.tsx Adds the empty Recruiting view skeleton.
src/components/recruiting/index.ts Adds a barrel export for the recruiting view.
src/components/layout/AppShell.tsx Adjusts sidebar tab content rendering to handle three tabs (recruiting sidebar intentionally empty).
src/components/conversations/TabSwitcher.tsx Conditionally adds the “Recruit” tab only when the flag is enabled.
src/App.tsx Switches main content to RecruitingView when the recruiting tab is active and the flag is enabled.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/App.tsx
Comment on lines +35 to +37
const RecruitingView = lazy(() =>
import('./components/recruiting').then((module) => ({ default: module.RecruitingView }))
);
@matthewod11-stack matthewod11-stack merged commit 1b52fba into main May 26, 2026
7 checks passed
@matthewod11-stack matthewod11-stack deleted the matthew/fhr-70-recruit-s01-recruiting-nav-tab-empty-view-behind-a-feature branch May 26, 2026 15:29
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.

2 participants