Component Showcase

Settings

Tabatha's settings page is a single React surface with 22 sections behind a sticky left nav, a live sync-health chip, and a keyboard-driven search that jumps straight to a field. Every control below is reproduced from the shipping source, down to the exact labels, placeholder text, and state colors.

Settings components

16 surfaces · strings verbatim from source · Pop-Art theme tokens

Twenty-two sections, which is a lot, and the reason is that Tabatha is opinionated by default and those opinions have to be negotiable. Nearly every piece of friction in the product - gate strictness, timers, blocked sites, retention - is a setting here, because friction you cannot tune is friction you eventually disable entirely. That volume is also why the search exists: press / and fuzzy-find any option rather than hunting the nav. The theme system renders live in the preview column, so you can see a change before you keep it.

🧭
Settings nav
The complete shipped section list: all 22 sections, in source order. The 220px rail is sticky and carries the version stamp, the sync-health pill with manual sync and reload buttons, and the search box. The active section gets a 3px accent rule.
src/settings/index.jsx
Fresh● Synced
Stale◐ Stale
Error⚠ Sync error
Never⚠ Never
Offline○ Offline
☁️
Sync health chip
One pill, five states, derived from the last successful sync timestamp and the connection state. It lives in the nav header so cloud health is visible from every section without opening Sync & Account.
src/hooks/useSyncStatus.js
🎨 Pop Art (Dark/Neon)
🏢 Corporate (Light/High Contrast)
🌙 Midnight (Deep Dark)
🍵 Matcha (Soft Green)
📟 Terminal (Hacker)
🌸 Sakura (Pink/Soft)
📐 Blueprint (Technical)
🟨 Neo-Brutalism (Harsh/Bright)
🌊 Glass Ocean (Translucent Blue)
👾 Retro Pixel (8-Bit/Warm)
📖 Solarized Warm (Sepia)
⚫ High Contrast Dark (Black/White)
🎨
Appearance theme select
All 12 shipped themes, shown expanded. Picking one rewrites the CSS custom properties at the document root, so every surface (popup, sidebar, new tab, InBar) reskins at once.
src/settings/index.jsx
Pop Art
Corporate
Midnight
Matcha
Terminal
Sakura
Blueprint
Neo-Brutalism
Glass Ocean
Retro Pixel
Solarized Warm
High Contrast Dark
🖌
Theme swatches
The real token triple behind each theme: page background, accent-primary, accent-secondary. Four of the twelve are light themes, which is why every component ships contrast-checked against both ends.
src/settings/index.jsx
Enable InBar
Auto-park paused tabs
Idle threshold (minutes)
Focus timer default
🎛
Field row primitives
The two atoms every section is built from: a flex label-and-control row with a hairline rule, and a 36x20 toggle whose knob slides from 2px to 18px. Section labels break long panels into groups.
src/settings/index.jsx
📥 Unsortedunsorted
📋 Todotodo
🎯 Focusfocus
⚡ Addressingaddressing
🚧 Roadblockedroadblocked
✅ Resolvedresolved
🎯
Focus Engine funnel stages
The six stages a focus moves through, listed read-only so the stage keys and their colors are discoverable. The same colors drive the funnel chips on the dashboard and in the sidebar.
src/settings/index.jsx
📐 URL Rules 🌐 Domain Groups 📋 Intent Changes
Add URL Rule
When a tab matches this pattern, Tabatha auto-assigns the intent/context. Supports wildcards: *
github.com/*
Intent: Learning React · Context: Learning React · ✅ Auto-apply · 🎯 Auto-create focus
No URL rules yet. Add a pattern above to auto-assign intents.
📐
URL Rules
Three pill tabs over one section. A rule maps a wildcard URL pattern to a default intent and context, so matching tabs are classified on creation instead of prompting the Gatekeeper. The empty state is shown for reference.
src/settings/UrlRulesSection.jsx
github.com
142 visits · 38 paths · 2h ago
● 2 open 📐 1 rules ⭐ targeted
🌐
example.com
19 visits · 6 paths · 2h ago
⏭ skipped
🌐
news.example.org
7 visits · 2 paths · 2h ago
🚫 dismissed
🌐
Domain Groups
Every domain Tabatha has seen, with visit and path counts, how many tabs are open on it now, and whether a rule already covers it. Star a domain to target it, dismiss one to hide it from the list. Two actions are still stubs.
src/settings/UrlRulesSection.jsx
Populated
Showing the last 24 intent changes.
Jul 16, 3:42 PMgithub.comUnsortedLearning React
Jul 16, 2:18 PMexample.comVacation PlanningQ1 Report
Jul 16, 1:05 PMgithub.comQ1 ReportLearning React
Jul 15, 6:31 PMexample.comUnsortedVacation Planning
Empty
📋
No intent changes recorded yet.
Changes will appear here when you set or modify tab intents.
📋
Intent Changes
An audit trail of every re-declared intent, oldest strikethrough on the left and the new one in accent. Useful for spotting a domain you keep reclassifying, which is usually a missing URL rule.
src/settings/UrlRulesSection.jsx
Debug Mode
Shows a diagnostic bar on the Dashboard with raw state and message responses. Useful for debugging service worker communication.
Event Log (128)
Auto-refresh (2s)
3:42:07info[focus]Focus started{"label":"Q1 Report"}
3:42:09debug[tabs]Tab classified from URL rule{"host":"github.com"}
3:43:31warn[sync]Push deferred, watermark behind{"pending":3}
3:44:02error[companion]Socket closed before handshake{"code":1006}
3:44:05info[companion]Reconnect scheduled{"in":5000}
3:45:18debug[clock]Heartbeat written{"stint":"open"}
3:46:00info[settings]Setting persisted{"key":"idleThreshold"}
🛠
Developer panel
The in-extension console. Every service tags its output with a source, so a hung message or a failed sync is traceable without opening the service worker inspector. Level filter, auto-refresh, and a clear button.
src/settings/index.jsx
Idle threshold (minutes)
Context timer (minutes)
Desktop data retention (days)
Desktop companion activity older than this will be automatically pruned once per day. Set to 0 to keep data indefinitely. Default: 90 days.
🗑
Data retention
Time Tracking holds the two thresholds that drive idle detection and the context nudge, plus the retention window. A daily alarm prunes companion activity past the cutoff; 0 disables pruning.
src/settings/index.jsx

🧠 Cortex — Observation & Optimization

Capture statusON
Observations in ledger1,284
Last capture3:46:12 PM
Last nightly exportJul 15
Capture folder (this machine)%APPDATA%\Tabatha Desktop\captures\
Last frame written (companion)Jul 16, 3:46:09 PM
AI routing tier (C8 ladder)
Proactivity
🧠
CortexPanel status & config
Cortex watches how work actually happens and proposes changes. This panel proves it is running (frame counts, folder, last write) and exposes the routing ladder: local harness first, backend proxy next, hosted gateway and bring-your-own-key still gated.
src/settings/CortexPanel.jsx
⌨️ Bind a hotkey for the tab you reopen most
You navigated to the same dashboard 31 times this week, always by typing the URL. A keyboard shortcut removes the round trip through the address bar.
Expected: ~6 min/week
🔁 Replace a manual step with a built-in export
Your weekly copy-paste into a spreadsheet matches an export Tabatha already produces. Switching to the export drops four manual steps.
Expected: ~20 min/week
📰 Batch your notification checks into one digest
You interrupted a focus 14 times to check the same two sites. A single scheduled digest keeps the information without the context switch.
Expected: ~35 min/week
🧩Generate a snippet for the report header you retypeexecuted
💡Move the standup tab out of the morning focus blockapproved
💡
Cortex recommendations
Each card states what it noticed, why it matters, and the time it expects to give back, then asks for a yes or no. Nothing runs without approval; decided items drop to a dimmed list marked approved or executed.
src/settings/CortexPanel.jsx
Enable Webhooks
focus_started focus_ended focus_timer_expired focus_resolved clock_in clock_out break_started break_ended task_created task_completed context_drift unfocused_nudge context_switch
🔗
Webhooks
Push any of 13 lifecycle events to an endpoint you control, with an optional shared secret for signature verification. This is how Tabatha feeds time entries and focus state into other tools without an integration.
src/settings/index.jsx
Versionv6.7.16-α
CodenameAttention Operating System
EcosystemFlux Family
📜 Changelog
6.7.162026-07-16
✨ Added
  • Settings search now indexes every field across all 22 sections.
  • Cortex panel surfaces the capture folder and the last frame written by the companion.
  • Theme swatches preview accent tokens before the theme is applied.
ℹ️
About & changelog
Version, codename, and ecosystem, over a changelog rendered from the shipped release feed. It opens on the current release and expands to the full history, so users can see what changed without leaving the extension.
src/settings/index.jsx