Components
Preference controls
Search provider, AI destination and theme preference configure daily behavior.
On this page
Purpose and placement
Search provider, AI destination and theme preference configure daily behavior.
Anatomy
- Search-engine select
- AI-agent select
- Dark-mode pressed button
- Saving-disabled theme control
Contract
| Input or boundary | Behavior |
|---|---|
| Search options | Brave, DuckDuckGo, Google, Bing, Yahoo |
| AI options | ChatGPT, Gemini, Grok |
| Theme | system on initial default; toggle selects explicit light/dark |
| Persistence | PATCH each change |
States and feedback
- Loading preferences
- Selected values
- Saving
- Local visual update
Interaction and composition
Select changes optimistically update state and invoke the API. Theme changes also dispatch startboard-theme immediately. A binary toggle exits system-following mode; the page has no separate restore-system control.
Responsive behavior
Native selects take the available width and retain platform option rendering.
Accessibility contract
The toggle has a name and aria-pressed. Selects have visual labels without htmlFor/id associations in source; remediate programmatic names.
Known implementation gaps
API errors are logged with no visible recovery. The theme toggle is disabled during saving, while select controls are not.
Source references
| Repository file | Responsibility |
|---|---|
| app/settings/preferences/page.tsx | Preference UI |
| app/api/preferences/route.ts | Allowed values |
| components/ThemeProvider.tsx | Theme event listener |
Examples from the app
Actual Startboard source UI with isolated fictional records; both native themes at 2× resolution or higher. No live integrations or account writes. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 08fa2595a668 · Documentation v1.0.0