- Enhanced exaSearch service with Exa API + fallback tier system
* Tier 1: Exa API (primary)
* Tier 2: Synthetic results with suggested web sources
* Improved error handling with graceful degradation
- Updated backend exerciseResearch route to return provider info
* Returns 'provider' field identifying which API was used
* Returns 'status' field (success/degraded) for UI feedback
* Better error messages for debugging
- Enhanced ResearchDisplay component with fallback feedback
* New ResearchProviderBadge shows which provider was used
* Visual indicators for fallback results (Suggested badge)
* Support for multiple provider types (exa, fallback, gemini, etc.)
* Improved error handling and recovery flows
- Updated ExerciseResearchPanel with better error handling
* Proper response parsing from backend
* Forwards provider and status info to display component
* Improved accessibility with tooltip hints
- Added comprehensive Research Display styling
* Responsive layout for mobile and desktop
* Visual hierarchy for summaries and sources
* Provider badge styling with color-coding
* Fallback state indicators for user awareness
- ExerciseResearchPanel: add ProviderBadge component showing which AI
tier (Ollama/Gemini/OpenRouter/OpenCode/Exa) served the response
- Add auto-retry on 429/503 with 2s delay and retry counter in button
- Normalize error messages for common failure modes (network, rate-limit)
- ResearchDisplay: pass onRetry prop to error state for inline retry button
- CSS: .research-panel-controls flex row, .provider-badge with per-provider
colour coding, .rd-error-actions + .rd-retry button styles
- Add ResearchDisplay.jsx: pure presentational component for research
data with loading skeleton, accessible error state, and source cards
- Refactor ExerciseResearchPanel to delegate rendering to ResearchDisplay
(separates fetch/state logic from display)
- Add ExerciseEncyclopediaPage.css: full dark-theme stylesheet using
CSS variables (--bg-*, --text-*, --accent, --border, --radius-*)
replacing the light-theme WorkoutEditPage.css import
- Update ExerciseEncyclopediaPage.jsx: new semantic class names,
keyboard-accessible card toggle (Enter key + role=button + aria-expanded)
- Mobile-responsive at 600px breakpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>