diff --git a/.planning/phases/08-search-filter-and-candidate-status/08-RESEARCH.md b/.planning/phases/08-search-filter-and-candidate-status/08-RESEARCH.md
new file mode 100644
index 0000000..05681c0
--- /dev/null
+++ b/.planning/phases/08-search-filter-and-candidate-status/08-RESEARCH.md
@@ -0,0 +1,491 @@
+# Phase 8: Search, Filter, and Candidate Status - Research
+
+**Researched:** 2026-03-16
+**Domain:** Client-side filtering, searchable dropdown components, schema migration, status badges
+**Confidence:** HIGH
+
+## Summary
+
+Phase 8 adds three capabilities to GearBox: (1) a search and category filter toolbar on the gear tab with result counts, (2) an icon-aware searchable category filter dropdown shared between gear and planning tabs, and (3) candidate status tracking (researching/ordered/arrived) with clickable status badges. The work spans all layers: schema migration (adding `status` column to `thread_candidates`), service/route updates (CRUD for status field), Zod schema updates, and several new client components.
+
+The codebase is well-structured for these additions. Client-side filtering is straightforward since `useItems()` already returns all items with category info. The `CategoryPicker` component provides a reference pattern for the searchable dropdown, though the new `CategoryFilterDropdown` is simpler (no creation flow). The candidate status feature requires a schema migration, but Drizzle Kit and the existing migration infrastructure handle this cleanly.
+
+**Primary recommendation:** Build in two waves -- (1) backend schema migration + candidate status (smaller, foundational), then (2) search/filter toolbar and shared category dropdown (larger, UI-focused). Both waves are pure client-side filtering with minimal server changes.
+
+
+## User Constraints (from CONTEXT.md)
+
+### Locked Decisions
+- Sticky toolbar above the item grid on the gear tab, stays visible on scroll
+- Search input + category dropdown side by side in the toolbar
+- Client-side filtering on every keystroke (no debounce needed for <1000 items)
+- Search matches item names only (not category names) -- category filtering is the dropdown's job
+- When any filter is active, items display as a flat grid (no category group headers)
+- Filters reset when switching between gear/planning/setups tabs
+- Three statuses: researching (default), ordered, arrived
+- Status badge appears in the existing pill row alongside weight/price/category pills
+- Badge shows icon + text label (e.g., magnifying glass + "researching", truck + "ordered", check + "arrived")
+- Muted/neutral color scheme for status badges -- gray tones, not semantic colors
+- Click the status badge to open a small popup menu showing all three status options
+- New candidates default to "researching" status
+- Requires `status` column on `thread_candidates` table (schema migration)
+- "Showing X of Y items" count displayed when filters are active
+- No combined "clear all" button -- user clears search text and resets category dropdown individually
+- "No items match your search" simple text message for empty filter results
+- Shared `CategoryFilterDropdown` component used on both gear tab and planning tab
+- Separate from existing `CategoryPicker` component
+- "All categories" as the first option -- selecting it clears the category filter
+- Searchable dropdown with search input inside
+- Trigger button shows selected category's Lucide icon + name when selected
+
+### Claude's Discretion
+- Exact toolbar styling (padding, borders, background)
+- Filter result count placement (in toolbar or above grid)
+- Status popup menu implementation details
+- Specific gray tone values for status badges
+- Keyboard accessibility patterns for the dropdown and status menu
+- Icon choices for status badges (magnifying glass, truck, check are suggestions)
+
+### Deferred Ideas (OUT OF SCOPE)
+None
+
+
+
+## Phase Requirements
+
+| ID | Description | Research Support |
+|----|-------------|-----------------|
+| SRCH-01 | User can search items by name with instant filtering as they type | Client-side `useState` + `.filter()` on `useItems()` data. Pattern documented in Architecture section |
+| SRCH-02 | User can filter collection items by category via dropdown | New `CategoryFilterDropdown` component using `useCategories()` data. Pattern from existing `CategoryPicker` |
+| SRCH-03 | User can combine text search with category filter simultaneously | Chain `.filter()` calls -- search text AND category ID. Both stored as `useState` in `CollectionView` |
+| SRCH-04 | User can see result count when filters are active | Computed from `filteredItems.length` vs `items.length`. Conditional rendering when filters active |
+| SRCH-05 | User can clear all active filters with one action | Per CONTEXT.md: no combined button. User clears search text and resets dropdown individually. Both inputs have clear affordances |
+| PLAN-01 | Planning category filter dropdown shows Lucide icons alongside names | Replace existing `
+
+## Standard Stack
+
+### Core (Already in Project)
+| Library | Version | Purpose | Why Standard |
+|---------|---------|---------|--------------|
+| React | 19 | UI framework | Already installed, all components use it |
+| TanStack React Query | - | Server state | Already used for `useItems`, `useCategories`, `useThreads` |
+| Zustand | - | UI state (panels/dialogs only) | Already used in `uiStore.ts` |
+| Drizzle ORM | - | Database schema + queries | Already used for all DB operations |
+| Drizzle Kit | - | Schema migration generation | Already configured in `drizzle.config.ts` |
+| Zod | - | Request validation | Already used in `schemas.ts` and route validators |
+| Hono | - | Server framework | Already used for all API routes |
+| lucide-react | - | Icons | Already used via `LucideIcon` component for all icons |
+| Tailwind CSS | v4 | Styling | Already used throughout |
+
+### No New Dependencies Required
+
+This phase uses only existing libraries. No new packages needed.
+
+## Architecture Patterns
+
+### Recommended Project Structure (Changes Only)
+```
+src/
+ client/
+ components/
+ CategoryFilterDropdown.tsx # NEW - shared searchable category filter
+ StatusBadge.tsx # NEW - clickable status badge with popup menu
+ CandidateCard.tsx # MODIFIED - add status prop and badge
+ routes/
+ collection/
+ index.tsx # MODIFIED - add search/filter toolbar to CollectionView
+ # - replace