Focal v10.9.6
A personal task manager designed for executives managing 40–50+ tasks across multiple workstreams — with capture, triage, AI-assisted prioritisation, aging alerts, analytics, and a structured weekly review.
Overview
Focal runs entirely in your browser as a set of four local files (Focal.html, Focal.css, Focal_data.default.js, Focal_app.js). All data is saved to your browser's localStorage — no account, no server, no sync needed.
Local file set
Open Focal.html in any browser — styles, data, and app logic load automatically.
Auto-saved locally
Every change saves instantly to localStorage. No manual save needed.
Mobile responsive
Works on desktop and mobile. Compact card layout on small screens.
100% private
Data never leaves your device. No analytics, no tracking.
Seven views, one system
Each view surfaces the same task data through a different lens. Today opens by default — it's your daily action view. Kanban is for drag-and-drop daily/weekly planning. Inbox is your capture layer. All Tasks is the full reference and edit view. Matrix gives a strategic quadrant view. Analytics shows your task management patterns and trends. Review is your weekly maintenance ritual.
The Three-Layer System
The app is designed around three distinct layers that handle different stages of task lifecycle — keeping active views clean even with 50+ total tasks.
Inbox — Capture
Frictionless. Add anything with just a title, no decisions needed. Nothing gets lost.
Backlog — Organised but inactive
Tasks you intend to do, reviewed weekly. Hidden from All Tasks, Today, and Matrix by default.
Active — Current sprint
To Do and In Progress tasks. Shown in all views. Aging alerts keep this layer healthy.
The key insight: Capture and triage are deliberately separated. Capture at the moment things happen (fast, frictionless). Triage during the weekly review (slow, intentional). This prevents both cognitive overload and task loss.
Capacity guidelines
| Layer | Recommended max | Signal to act |
|---|---|---|
| Inbox | 10–15 items | >10 = process today |
| Active (To Do + In Progress) | 15–20 tasks | >20 = move some to Backlog |
| Backlog | No hard limit | Aging alerts surface dead weight |
Recommended Workflow
The system works best when used in three rhythms: ongoing capture, a daily 5-minute check, and a weekly 10-minute review.
Ongoing — throughout the day
New tasks go to Inbox immediately (just a title, no decisions). Active tasks get their status updated inline as work progresses.
Daily — 5 minutes
Open the app — Today is the default view. Review Today's Plan (your Kanban commitments), then check Overdue and Due This Week. Drag items into the Kanban Today column to commit to them.
Weekly — 10–15 minutes
Run the Weekly Review: Stage 1 clears the inbox, Stage 2 resolves aging tasks, Stage 3 reviews the backlog, Stage 4 runs a hygiene check, Stage 5 reprioritizes your active tasks. This is the maintenance ritual that keeps the system healthy.
📥 Inbox
The inbox is your capture layer — a holding area for anything that needs to be tracked before you've decided what to do with it.
Capturing items (v9.21)
The capture bar at the top of the Inbox is a smart textarea that expands as you type. It supports three modes:
- Single line + Enter (or + Capture) — instantly saves one item to the inbox. An optional Note field is available for single-task captures.
- Multi-line paste + Capture — each non-empty line becomes a separate inbox item. Paste a list from anywhere (Claude, notes, email) and all lines land in the inbox in one click. Toast confirms how many were added.
- Single or multi-line + ✨ AI → Task — Claude structures the text and creates tasks directly. See AI Features below.
The inbox is intentionally frictionless. No priority, no section, no due date required. Capture now, decide later. Use Shift+Enter to add a newline while typing; plain Enter captures immediately.
Inline triage fields (v8.4)
Every inbox card displays all key fields directly — no need to open a triage panel for the basics:
- Section — which category this task belongs to
- Priority — P1 through P4
- Status — To Do or In Progress
- Due date — date picker inline
- Urgency — Not Urgent / Urgent toggle
- Connections — type a name and press Enter or comma to add; click × on a tag to remove
All changes save immediately. When you're ready to promote to a task, use the action buttons.
Action buttons
Each inbox item has three actions in the top-right:
- + Notes — expands the panel to reveal the Move to Active / Backlog / Delete buttons
- 🔒/🔓 — confidential toggle
- Delete — remove immediately
After setting fields inline, click + Notes → Move to Active (or Backlog) to create the task with all your pre-set values carried over.
✨ AI → Task — single or multi-task (v9.21)
Type any description in plain English and click ✨ AI → Task. Claude decides how many tasks to create:
- Simple task — Claude returns one task, the Add Task modal opens pre-filled. Review and save.
Example: "P1 follow up with Alex on recruiter shortlist by Friday" - Multi-task description (parent + subtasks, or several items in one sentence) — Claude returns multiple tasks, the batch preview panel appears so you can review and confirm before anything is created.
Example: "create a parent task for quarterly bonus review with a subtask for Jordan and one for Sam, both due end of next week"
You never need to decide which mode to use — Claude reads the intent and routes automatically. When subtasks are detected, the preview shows them ↳ indented under their parent, and the actual parent-child link is created when you confirm.
✨ AI → Task — batch mode (v9.21)
Paste a list of tasks (one per line) into the capture bar and click ✨ AI → Task. Claude parses all lines in a single call. The preview panel shows each task's priority, title, section, and due date so you can verify assignments before committing. Click Create N tasks to save them all directly — no modal needed. Cancel discards without creating anything.
- For lists of 15+ tasks the preview scrolls — use it to check Claude didn't merge or drop any lines.
- If the task count in the preview doesn't match your input lines, a yellow warning appears so you know to review carefully.
- Practical limit is around 30–35 tasks per batch. For larger dumps, split into two pastes.
Intended workflow: ask Claude to extract all action items from your notes, email thread, or meeting recap — then paste the list straight into Focal and hit ✨ AI → Task. Each line becomes a fully structured task.
All AI features require an Anthropic API key. If none is set, clicking any AI button opens âš™ï¸ Settings → AI tab automatically.
Process All mode
Click âš¡ Process All to enter a focused triage mode that walks through inbox items one at a time, keeping you from getting distracted by the rest of the list.
The inbox count badge on the Inbox tab includes both manual inbox items and pending imported tasks.
📋 Daily Tasks Feed — triage (v9.22, updated v9.25)
An overnight job extracts action items from three sources — 📧 Outlook email, 💬 Microsoft Teams chat, and 📅 upcoming calendar meetings — and writes them to a local tasks.json file. Focal reads that file directly and shows any unprocessed items at the top of the Inbox view for quick triage.
First-time setup
On your first visit to Inbox, a Connect button appears at the top of the section. Click it — your browser will open a file picker. Navigate to the tasks.json file and select it. Focal stores a permission handle in IndexedDB so it can read and write the file automatically on every subsequent load — no repeat prompts needed.
Triage cards
Each pending task appears as a card showing:
- A colored left border and priority dot — red = High (high-priority sender, deadline ≤ 48 h, or meeting within 24 h), amber = Medium, grey = Low
- The category pill (Board, Finance, HR, etc.) and due date if one was extracted
- The full task sentence extracted from the source item
- A source icon and attribution line — 📧 email shows sender + subject, 💬 Teams shows sender + chat name, 📅 meeting shows the meeting subject
Actions
- Add as Task — opens the task modal pre-filled with the extracted title, priority, due date, and a source note (e.g. "Meeting prep: …" for calendar items, "Teams msg from: …" for chats). Review, adjust, and save.
- Skip — dismisses the card without creating a task and marks it processed. It will not reappear.
Once a task is processed (added or skipped) its processed_at timestamp is written back to tasks.json. The overnight extractor uses every source_uri in the file as its cross-source dedup index — never delete entries from that file.
📋 All Tasks
Your main working view. A full task table organised by sections (categories), with every task attribute visible and editable in place.
Sections
Tasks are grouped into sections (e.g., Finance, Operations, People, Projects). Each section has a collapsible header with an open task count badge. Click the section header to collapse or expand it.
Priority
Click any priority badge to change it via a dropdown. P1 rows have a subtle red tint.
Status
Click any status badge to change it. When a task is marked Done its row gets a strikethrough and reduced opacity. Backlog tasks are hidden from this view by default (see Backlog).
Due dates
Click the due date cell to open a floating date picker with Day and Week tabs. Overdue dates show in red, dates due within 3 days show in amber.
Connections
Click the connections cell to open an inline popover. Type to search people or topics from your connections list — add or remove with a click.
Completing tasks
Click the checkbox on the left of any row to toggle completion. Done tasks are hidden by default — click the ✓ Done pill in the header to make them visible (pill lights up white when active).
If the task has subtasks, marking it Done automatically marks all its subtasks Done too (cascade). The toast shows the count: “✓ Done (+2 subtasks)â€.
Row drag-and-drop — subtask linking or reorder
Drag one row onto another to get a “Make subtask?†dialog:
- ✓ Make subtask — links the dragged task as a child of the target. Subtasks appear indented with a ↳ prefix.
- No, just reorder — moves the dragged row above the target row with no parent relationship set.
- × (cancel) or Escape — dismisses the dialog with no changes.
âš¡ Today
The default opening view. Bridges your deliberate daily plan (Kanban) with time-based urgency. Shows three sections — only when non-empty.
Three sections
- 📊 Today's Plan — tasks you dragged into the Kanban Today column. Your committed work for the day, shown first regardless of due date. A capacity badge shows your load: green (1–3 tasks, good), amber (4, at capacity), red (5+, consider reducing focus).
- 🔴 Overdue — past-due tasks not already in Today's Plan. Requires attention even if not planned.
- 📅 Due This Week — tasks due within 7 days, not overdue, not in Today's Plan. Your bench — pull these into Kanban Today if you finish your plan early.
Done and Backlog tasks are excluded. Tasks in Today's Plan are never duplicated in Overdue or Due This Week.
Click any card to open the edit modal, or right-click for quick actions (Mark as Done, Send to Backlog, Add subtask).
The search bar filters Today live as you type — results update across all three sections in real time, same as All Tasks.
Make Today your morning check-in. If it shows more than 5–7 items regularly, it's a signal to either reschedule tasks or move some to Backlog.
⬛ Eisenhower Matrix
The Matrix tab has two modes: View (quadrant overview) and ✦ Prioritize (AI-assisted triage). Switch between them using the mode toggle at the top of the tab.
View mode — the 2×2 quadrant
The classic Eisenhower Matrix: Urgent vs Not Urgent on one axis, Important (P1/P2) vs Less Important (P3/P4) on the other. Backlog and Done tasks are excluded.
Q1 — Do First
P1/P2 + Urgent. Critical tasks that need immediate attention.
Q2 — Schedule
P1/P2 + Not Urgent. Important strategic work to plan time for.
Q3 — Delegate
P3/P4 + Urgent. Low-importance but time-sensitive. Delegate if possible.
Q4 — Eliminate
P3/P4 + Not Urgent. Consider moving to Backlog or deleting.
Drag and drop (View mode)
Drag tasks between quadrants to update their priority and urgency fields simultaneously. Dropping a task into Q1 sets urgency = urgent and priority = P1/P2; Q4 sets urgency = not urgent and priority = P3/P4.
Drag one card onto another card (not the quadrant background) to get a â€Make subtask?†dialog. Click ✓ Make subtask to link them, or No, keep priorities to cancel without changing quadrant placement.
Section filter (View mode)
Use the section filter pills above the matrix to focus on tasks from a specific category.
✦ Prioritize mode (v9.10)
An AI-assisted triage session. The engine surfaces tasks that are overdue, due this week, or haven't been reviewed recently — and asks you three structured questions for each one. Accept the suggested priority or keep the current one; reviewed tasks disappear from the queue until next week. Focus 10 limits the queue to the 10 most urgent candidates.
Prioritize mode is now also Stage 5 of the Weekly Review — the same triage engine runs automatically at the end of each review session. You no longer need to visit the Matrix tab separately to keep priorities current.
The stats bar shows a teal "To Prioritize" chip whenever tasks need review — click it to jump directly to Matrix Prioritize.
Triage controls — three segmented selectors
For each task in the queue, set:
- Impact — None / Some / High. How much does completing this task move a needle you care about?
- Time Pressure — Later / This Week / Now. When does this actually need to happen?
- Ownership — Delegate / Shared / Me. Who is really responsible?
Suggestion engine
After you set the three controls, the engine silently scores the task and displays a suggested priority (P1–P4) with a brief â€Why?†rationale explaining the logic. The suggestion is advisory — you decide whether to accept it.
Actions
- ✓ Accept — applies the suggested priority to the task and advances to the next card.
- Keep — keeps the current priority unchanged, records a review timestamp, and advances.
- Open — opens the full Edit modal so you can make deeper changes before continuing triage.
Guardrail strip
A live health bar shown at the top of Prioritize mode. It flags systemic problems in your task list so you don't just optimise individual tasks while the whole stack is unhealthy:
- P1 Active — count of active P1 tasks. High counts (6+) warn that your critical lane is overloaded.
- In Progress — how many tasks are simultaneously In Progress. Too many signals lack of focus.
- Needs Review — tasks not reviewed in 30+ days. These priorities are probably stale.
- P1/P2 No Outcomes — important tasks with no Strategic Outcome linked. If you can't say why it matters, it probably shouldn't be P1.
- Overdue — past-due tasks that haven't been rescheduled or closed.
Mini Matrix panel
A read-only 2×2 quadrant on the right side of Prioritize mode. It updates live as you triage, so you can see how your priority stack is shifting without leaving the triage queue.
Recommended cadence: Run Prioritize mode once a week (during Weekly Review) to keep your P1/P2 stack honest. The engine flags tasks that haven't been reviewed in 30+ days so nothing drifts silently.
Strategic Outcomes
Outcomes are the high-level results your tasks are working toward. Linking tasks to outcomes makes prioritisation explicit — if a P1 task can't be tied to an outcome you care about, it probably shouldn't be P1.
Default outcomes
Focal ships with six default outcomes: ARR, NRR, EBITDA, Board Commitments, Leadership / People, and Strategic Projects. You can add, rename, or deactivate outcomes via the 📊 Outcomes button.
Linking outcomes to tasks
Each task can have up to 2 outcomes linked. Set them in the Add/Edit modal or during Prioritize mode triage. Linked outcomes appear as small colored badges on task cards and rows. Tasks with no outcomes linked are flagged in the Guardrail strip if they are P1 or P2.
📊 Kanban Board
A 4-column board for daily and weekly task prioritisation. Drag tasks between columns to plan your day and track progress through the week.
Active Pool
All active To Do / In Progress tasks not yet assigned to a column. Sorted by priority then due date.
This Week
Tasks committed to this week. Drag here from Active Pool to plan your weekly workload.
Today
Today’s focus. Drag tasks here from This Week or directly from Active Pool to set your daily plan.
Done
Completed tasks. Dragging a card here marks it Done. Use ↩ Clear to return tasks to Active Pool.
Drag-and-drop rules
- Drag any card to any column — movement is unrestricted.
- Dropping into Done sets the task status to Done and removes it from active columns — whether you drop onto an existing Done card or into the empty column space.
- Dropping out of Done (back to Pool, Week, or Today) reopens the task as To Do.
- Dropping a recurring task into Done fires the recurrence logic: an archive copy is created and the original resets to the next cycle in Active Pool.
- Dropping one card onto another card in any column except Done shows the "Make subtask?" dialog. Dropping onto a Done card always completes the task immediately — no dialog.
Move arrows — quick column navigation (v8.4)
Hover over any card to reveal ‹ › arrow buttons on the right side. Click to move the card one column left or right without dragging. Useful when the destination column is crowded.
Status play button (v8.4)
Each card shows a small ▶ (play) button to the left of the task name. Click it to instantly toggle between To Do and In Progress without opening the edit modal. When In Progress, it shows ⸠in amber.
Section filter bar (v8.4)
A row of section pills appears below the Kanban header. Click a section to show only tasks from that category across all four columns. Ctrl+click multiple sections to combine them. Click All to reset.
Search
The search bar filters all four Kanban columns live as you type. Clicking a search result scrolls directly to the matching card — the view stays in Kanban, no tab switch.
Daily planning habit: Start each morning by dragging 3–5 tasks from This Week to Today. Use the Done column as a real-time progress tracker throughout the day. Use the section filter to focus on one workstream at a time.
🔄 New Week button
At the start of each week, click 🔄 New Week to reset the board. This returns all tasks in This Week and Today back to Active Pool. Done tasks are not affected. A confirmation dialog appears first.
↩ Clear Done
The ↩ Clear button in the Done column header returns Kanban-completed tasks to Active Pool and resets their status to To Do. This only affects tasks dragged to Done via the Kanban board — tasks marked Done in other views (All Tasks, Today) are not affected.
Done column — daily scorecard
The Done column is a daily scorecard. When Show Done is toggled off (default), it shows only tasks completed today. When Show Done is on, it shows all completed tasks. Confidential tasks are always hidden from Done when the Confidential filter is active.
Active Pool — category grouping
Click the ≡ Group button in the Active Pool header to toggle category grouping. When on, tasks are grouped by their section with collapsible headers — click any section header to expand or collapse it. When off (default), tasks are shown in a flat prioritized list.
Active Pool — date sections (v8.6, v9.10, v9.21)
When Group is OFF, the Active Pool automatically organizes tasks into up to four sections — only shown when non-empty:
- âš ï¸ Overdue (N) — tasks whose due date has already passed. Red header, pinned to the top so they are never buried. Count shown in the header.
- 📅 Due This Week — tasks due on or before this Sunday. Amber header. A → This Week button appears in the header — click it to bulk-move every task in this section directly to the This Week column in one step. Drag individual cards instead if you want to move only some.
- 📆 Due Next Week — tasks due in the following calendar week (Monday–Sunday). Teal header. Plan ahead.
- (unlabelled) — everything else: tasks with no due date or due further out.
When Group is ON, section grouping takes precedence and per-date sections are not shown. Cards due this week still get the amber left border as a per-card indicator.
Subtask relationships
Drag one card onto another card (not into the column background) to get a "Make subtask?" dialog:
- ✓ Make subtask — links the dragged task as a child of the target task. If the parent is in This Week or Today, the child automatically moves to that same column. Subtasks appear indented with a teal left-border in all columns, with a ↳ prefix in All Tasks, and a parent context label in Today view.
- No, just move — moves the dragged task to the target’s column without creating a relationship.
The same subtask dialog also works in All Tasks (row-to-row drag) and Matrix (card-to-card drag).
To remove a subtask relationship, open the task in Edit mode — the parent name appears with a × Remove button.
Right-click context menu (v8.7)
Right-click any task card or row to open a context menu. Available actions depend on the current view:
| Action | All Tasks | Kanban | Today | Matrix |
|---|---|---|---|---|
| ↳ Add subtask | ✓ | ✓ | ✓ | — |
| âœï¸ Edit task | ✓ | ✓ | ✓ | ✓ |
| ✓ Mark as Done | ✓ | ✓ | ✓ | ✓ |
| 📋 Send to Backlog | ✓ | ✓ | ✓ | ✓ |
| → / ↠Move column | — | ✓ | — | — |
| 🗑 Delete | ✓ | ✓ | ✓ | ✓ |
Context-aware: "Mark as Done" is hidden on already-Done tasks; "Send to Backlog" is hidden on Backlog tasks.
Column quick-add (v8.8)
Right-click anywhere on a column — the header or any empty space in the body — to instantly add a task directly to that column:
- Active Pool — creates a To Do task placed in the pool.
- This Week — creates a To Do task placed in This Week.
- Today — creates an In Progress task placed in Today.
The Add Task modal opens with the title "Add Task → [Column]" so you always know where the task will land. Save as normal — the task appears in the correct column immediately. The Done column is excluded from quick-add.
Fastest way to capture a new task for today: right-click the Today column → Add Task → type the name → Save. Done in 3 seconds without touching the header or dragging anything.
Parent → column cascade
When you drag a parent task to any column, all its children automatically follow:
- Move parent to Today → all children move to Today.
- Move parent to This Week → all children move to This Week.
- Move parent to Active Pool → all children return to Active Pool.
- Move parent to Done → all children are marked Done (see below).
Children are always grouped and rendered directly below their parent in every column, in the same order they appear in the Active Pool. If a child was previously in the Done column (status = Done) and its parent is moved back to an active column, the child’s status resets to To Do automatically.
Parent → Done cascade
Marking a parent task Done (by any method — checkbox, status dropdown, edit modal, or Kanban drag) automatically marks all its subtasks Done too. Subtasks of subtasks are also cascaded recursively. Recurring tasks are excluded (they reset to the next cycle, not truly Done).
Sync with other views
- Tasks marked Done in All Tasks automatically appear in the Kanban Done column.
- Tasks in the Kanban Today column show a 📊 indicator in the Today view.
- The Stats bar shows an In Kanban chip with the count of tasks currently in the Today column — click it to jump directly to the Kanban view.
Mobile usage
On mobile, the four columns snap-scroll horizontally. Swipe left/right to navigate between columns. Dot indicators at the top show the current column. Touch drag works using the same gestures as desktop — press and hold a card, then drag it to the target column.
Backlog and Done tasks are excluded from Active Pool. Use the All Tasks view to activate a Backlog task before it appears in Kanban.
🔄 Weekly Review
A structured 5-stage process to clear the inbox, resolve aging tasks, review the backlog, run a hygiene check, and reprioritize your active tasks. The system's weekly maintenance ritual — takes 10–15 minutes.
Home screen
Before starting, the Review home screen shows a summary of what's waiting: Inbox / Aging / Backlog / Hygiene / Prioritize counts. The Hygiene count shows active tasks missing at least one of: a strategic outcome, a due date, or a connection. The Prioritize count shows tasks needing a priority review. Click Start Review → to begin.
Stage 1 — Inbox triage
Each inbox item is presented with three actions:
- → Active — opens the task modal to create a proper active task
- 📋 Backlog — sends it to Backlog without further decisions
- 🗑 Delete — removes it, no task created
When the last inbox item is processed, the review auto-advances to Stage 2. Or click Skip to Aging → to skip remaining inbox items.
Stage 2 — Aging tasks
Shows tasks that haven't moved in too long (yellow = approaching threshold, red = past threshold). Each card shows the task name, status, and how many days it's been stale.
- ✓ Keep — resets the aging clock to today and dismisses the task from this review (snooze for another cycle)
- âœï¸ Edit — opens the task modal to update it
- 📋 Backlog — moves it to Backlog status
- 🗑 Delete — permanently deletes the task
Stage 3 — Backlog review
Lists all Backlog tasks for a quick activate-or-archive pass:
- ▶ Activate — sets status to "To Do" and moves it to the active list
- ✓ Keep — leaves it in Backlog for another week (won't re-appear this session)
- 🗑 Delete — permanently deletes the task
Stage 4 — Hygiene check (v8.4)
Lists active tasks that are missing one or more of the following:
- No outcome — not linked to any strategic outcome
- No due date — open-ended with no deadline
- No connections — not linked to any person or organization
For each flagged task, quick-fix buttons appear inline:
- Quick due: +3d / +1w / +2w / +1m — sets a due date relative to today
- Suggested — auto-picks a due date based on priority (P1 = 3 days, P2 = 7 days, P3 = 14 days, P4 = 30 days)
- Outcome chips — click any active outcome to assign it immediately
- âœï¸ Edit — opens the full edit modal
- ✓ Skip — accepts the task as-is for this review cycle
Stage 5 — Priority Review (v9.10)
The same triage engine as Matrix Prioritize, embedded directly in the review flow. Shows tasks that haven't been prioritized recently, are overdue, or have a suggested priority different from their current one. For each task:
- ✓ Accept P# — applies the suggested priority and marks the task as reviewed (card disappears)
- — Keep P# — confirms the current priority as intentional and marks it reviewed (card disappears)
- ✠Open — opens the full edit modal to make changes
You can also adjust Impact / Pressure / Owner controls on each card before accepting. Tasks that are reviewed disappear from the queue until next week (unless overdue or due this week).
If there are no tasks needing review, this stage is skipped automatically.
Done screen
After all stages complete, a ✓ Done confirmation screen appears with a Weekly Pulse summary showing your five key metrics for the week. Click Go to Today to return to normal work. The next time you navigate to the Review tab, it resets to the home screen.
🤖 AI Weekly Debrief (v9.10)
If an Anthropic API key is configured, the Done screen shows a ✨ Generate AI Debrief button. Click it when you're ready — Claude will produce a 3–4 sentence executive summary covering what got done, what's still at risk, and one specific recommendation. Always uses Haiku for speed.
The debrief is generated fresh each time you complete a review — useful as a quick brief before a weekly leadership call, or as a reflective end-of-week note.
If all four stages are empty, clicking Start Review → immediately shows the Done screen. Use Hygiene consistently — tasks without outcomes and due dates tend to become zombie tasks over time.
📈 Analytics (v9.21)
Health-focused metrics that answer "am I working on the right things and is anything falling through the cracks?" — without any manual tracking. Every card, chip, and chart row is clickable to drill into the detail.
How it works
Every task action (creating, completing, changing priority, triaging inbox, moving Kanban cards, completing a Weekly Review) is silently logged. The analytics engine uses this log plus your live task data to compute the metrics below.
Health Snapshot — clickable cards
| Card | What it shows | Click action |
|---|---|---|
| Open P1s | Count of active P1 tasks + how many have been open >7 days | → All Tasks filtered to P1 |
| Stale | Active tasks that are aging — tasks unchanged beyond status-based thresholds (same logic as the Aging indicator) | → All Tasks with Aging filter |
| Inbox Items | Current inbox size — zero is the goal | → Inbox view |
| Weekly Review | Streak dots (â—/â—‹) for last 4 weeks | → Weekly Review |
| Focus (P1/P2) | % of last 30d completions that were P1 or P2 | — (informational) |
Work by Area — bi-directional charts (v9.21)
Three horizontal bar charts replace the old summary table. The left side (teal) shows current open tasks; the right side (amber) shows completed tasks in the selected period. All three charts share the same scale so you can compare sizes across sections, priorities, and people at a glance.
- By Category — one bar pair per section. Click any row → scrolls to that section in All Tasks.
- By Priority — P1/P2/P3/P4 bar pairs. Click any row → filters All Tasks to that priority.
- By People — top 8 connections by involvement. Click any row → filters All Tasks to that person.
A value of 0 shows a short grey stub bar so you can distinguish zero from missing data.
Period filter
Use the This Week / This Month / This Quarter / This Year buttons at the top of the section to change the window for the "completed" (right-side) bars. Open task counts always reflect the current live state regardless of period.
If a category shows many open tasks but zero completions for the month — that workstream is stalled. Click its row to investigate.
Completions by Strategic Outcome (v9.0)
A grid of mini bar charts — one per active Strategic Outcome (ARR, NRR, EBITDA, Board Commitments, Leadership/People, Strategic Projects). Each card shows total completions linked to that outcome in the last 90 days, plus a weekly trend. Use this to answer: "Am I actually moving the needle on ARR, or just clearing busywork?"
6-Week Trend (v9.21)
A bar chart showing weekly completions over the past 6 weeks. The current week bar is highlighted in teal. Helps spot recent throughput patterns.
Export
Click 📥 Export Analytics JSON to download a full log of all events and weekly summaries as a JSON file.
Storage
Analytics data is stored in a separate focal_log localStorage key (not mixed with task data). Raw events are kept for 1 year, weekly snapshots are kept for 52 weeks. Storage grows with usage — the quota guard automatically trims to the most recent 500 events if localStorage fills up.
Research says: Monitoring goal progress reliably improves attainment (Harkin 2016 meta-analysis, effect size d=0.40). The key is making tracking automatic and metrics few — exactly what this tab does.
â± Task Aging
Aging indicators surface tasks that haven't changed status in too long — preventing "zombie tasks" that sit forgotten in the system.
How it works
Aging is based purely on inactivity — how many days have passed since the task's status last changed. Whether or not a task has a due date makes no difference to the aging indicator. Overdue tasks are surfaced separately via the Overdue filter pill in the filter bar.
Status-based thresholds
| Status | Yellow (warning) | Red / Zombie (critical) |
|---|---|---|
| To Do | 14 days | 30 days |
| In Progress | 7 days | 21 days |
| Backlog | 30 days | 90 days |
| Done | Never shown | |
Visual indicators
- A colored dot appears in the aging column when a threshold is crossed
- Hover the dot to see a tooltip: e.g. "To Do for 18 days — consider updating"
- The entire row gets a subtle background tint (yellow or red wash)
- An â± Aging filter pill appears in the filter bar when aging tasks exist, showing a count
Resetting the aging clock
Only a status change resets the aging clock. Editing notes, priority, connections, or the due date preserves the existing timestamp. The aging clock measures time since the last meaningful status transition.
Stage 2 of the Weekly Review handles aging tasks in bulk. The Keep action resets the aging clock to today and immediately dismisses the task from the review — useful when a task is legitimately on hold and you want to snooze it for another cycle.
📋 Backlog
Backlog is a 4th task status for tasks you intend to do someday but aren't actively working on. Backlog tasks are hidden from All Tasks, Today, and Matrix by default.
Setting a task to Backlog
Click the status badge on any task row and select Backlog. The task immediately disappears from the All Tasks view. The stats bar shows a 📋 Backlog count chip when backlogs exist.
Show / Hide Backlog
A 📋 Backlog pill appears in the header whenever backlog tasks exist. Click it to make them visible in All Tasks — the pill lights up in indigo when active. Backlog tasks are hidden again on the next page load.
Backlog filter pill
Click the 📋 Backlog pill in the filter bar to see only backlog tasks — useful for a quick review outside of the Weekly Review flow.
Sending inbox items to Backlog
In both the Inbox triage panel and the Weekly Review Stage 1, clicking 📋 Backlog immediately creates a Backlog task without opening the edit modal. Fast and frictionless.
Section open count badges exclude Backlog tasks. The active task count only reflects To Do and In Progress tasks.
Filters & Stats Bar
The filter bar and stats bar let you quickly focus on what matters and get a snapshot of task health.
Filter pills (v9.8)
Click any pill to apply a filter exclusively. Click the same pill again to deselect it and return to All. The active pill is highlighted. Available filters:
- All — clears all filters and shows everything (default)
- P1 Critical / P2 High — filter by priority
- In Progress — only in-progress tasks
- Overdue — tasks past their due date
- Due This Week — tasks due in the next 7 days
- 🔠Recurring — only recurring tasks
- 🔒 Confidential — only confidential tasks
- 📋 Backlog — only backlog tasks
- ⱠAging — tasks past their aging threshold (appears automatically when aging tasks exist)
👤 By Person filter (v9.2)
A 👤 All People button at the right end of the filter bar opens a multi-select dropdown. Check one or more names (or groups) to filter all views — All Tasks, Today, Matrix, and Kanban — to tasks involving those connections. Uses OR logic: a task is shown if any of its connections matches any selected person or group.
- Search (v9.28) — a search box at the top of the dropdown lets you type to instantly filter the list by name. Section headers hide automatically when their group is empty; "No match" appears if nothing fits.
- Multi-select — check multiple names; the button shows the count ("👤 3 people").
- Groups — named groups (e.g. "MT") appear at the top of the list. Selecting "MT" matches tasks connected to any member of that group.
- Clear — uncheck all, or use the "✕ Clear filter" link at the bottom of the dropdown.
- Manage groups in âš™ï¸ Settings → People.
Multi-select filters with Ctrl+click (v8.4)
Hold Ctrl (or ⌘ on Mac) and click any filter pill to add it to the current selection rather than replacing it. This uses OR logic — tasks matching any of the selected filters are shown.
- Ctrl+click P1 then Ctrl+click P2 → shows all P1 and P2 tasks
- Ctrl+click Overdue then Ctrl+click In Progress → shows overdue tasks OR in-progress tasks
- Ctrl+click an active filter → deselects it from the multi-selection
- Deselecting the last filter → automatically resets to All
- Clicking All always resets to exclusive (clears multi-select)
Hover over any pill for a tooltip reminder: "Ctrl+click to combine filters".
The same multi-select behavior applies to the section filter bar in Kanban and the section filter pills in Matrix.
Search
Type in the search box to filter tasks by name in real time. Search combines with active filter pills.
Stats bar (v9.10)
Above the task list, clickable stat chips show at a glance. Every chip navigates or filters on click:
- P1 — count of P1 critical tasks (click to filter All Tasks to P1)
- In Progress — count of in-progress tasks (click to filter)
- Due Soon — count of tasks due this week (click to filter)
- Overdue — shown in red when >0; click to filter overdue tasks
- Backlog — count of backlog tasks (click to filter) — shown when >0
- In Kanban — teal chip; count of tasks in Kanban Today column — click to open Kanban view
- To Prioritize — teal chip; count of tasks awaiting priority review in the triage queue — click to jump directly to Matrix → Prioritize mode. Shown whenever tasks need review. This is your signal that the Prioritize engine has work to do.
- Total Open — total active tasks (click to clear all filters)
Header controls
The header uses a grouped layout with three zones separated by dividers:
- Toggle pills (left group) — dim by default, light up when active:
- ✓ Done — shows/hides completed tasks (white when visible, hidden by default)
- 📋 Backlog — shows/hides backlog tasks (indigo when visible; only appears when backlog tasks exist)
- 🔒 Conf — shows/hides confidential tasks (purple when visible, hidden by default)
- 🎠Demo — toggles Demo mode (amber when on); masks all task names across every view with dots — section names, people, and categories remain visible. Session-only; resets on reload.
- Icon buttons (middle group):
- âš™ï¸ â€” open the Category Manager modal (drag to reorder, click icon to change it, add/delete sections)
- 📖 — open this User Manual
- + Add Task (right, teal button) — open the Add Task modal
âš™ï¸ Category Manager
Manage your sections (categories) — the top-level buckets that group your tasks. Open via the âš™ï¸ icon in the header.
Reorder sections
Drag any section row by its â ¿ handle to reorder. The new order is reflected immediately across all views.
Change section icon (v8.4)
Click the emoji icon next to any section name to open an icon picker with 40 business/productivity icons. Click any icon to apply it immediately. The picker closes automatically.
Add a new section
At the bottom of the modal: click the emoji to pick an icon for the new section, type a name, and click + Add (or press Enter). The new section appears immediately in all views.
Delete a section
Click the 🗑 button next to a section. If the section has open tasks, a confirmation dialog shows how many tasks will be lost. Deletion is permanent — tasks in that section are removed with it.
Add / Edit Tasks
The task modal is a full-featured form for creating and editing tasks. Open it with the + Add Task button, by pressing N, or by clicking a task name in the list.
Fields
| Field | Description |
|---|---|
| Task description | Required. The main task name. |
| Notes / Next Step | Free text for context or the immediate next action. |
| Section | Which category/section this task belongs to. |
| Priority | P1 Critical → P4 Low. |
| Status | To Do / In Progress / Done / Backlog. |
| Due Date | Optional. Shown in Today view and stats bar when due soon. |
| Urgency | For Matrix view quadrant placement (Urgent / Not Urgent). |
| Task Type | One-time (default) or Recurring. |
| Recurrence | For recurring tasks: interval in days/weeks/months. |
| Confidential | Mark as sensitive — see Confidential section. |
| Connections | People or topics linked to this task. Autocomplete from your connections list. |
| 🔗 Link / URL | Optional. Paste a URL (e.g. a Google Doc, Notion page, or meeting link). Saved on the task and shown as a clickable 🔗 link in All Tasks rows, Today cards, and Kanban cards. |
| Task Type — Decision (v9.0) | Set Task Type to âš–ï¸ Decision for tasks that represent a decision to be made. The row shows a âš–ï¸ icon instead of ↩ for recurring, with a toggle to mark the decision as decided. |
| Decided (v9.0) | Visible only when Task Type is Decision. Set to ✓ Decided once the decision has been made. The icon updates to a teal âš–ï¸ in the task row as a visual indicator. |
| Strategic Outcomes | Link the task to one or more of your six strategic outcomes (ARR, NRR, EBITDA, Board Commitments, Leadership/People, Strategic Projects). Used in Matrix view and Analytics. |
Modal footer buttons
- Cancel — close the modal without saving.
- 🗑 Delete — permanently delete the task (visible in Edit mode only, not Add). A confirmation dialog appears first.
- Save Task — save and close. Pressing Enter in the Task Description field also saves.
Section quick-add
Each section in the All Tasks view has a + Add button in its header row that opens the modal pre-set to that section.
Inline Editing
Most task fields can be edited directly in the task list row without opening the modal — keeping you in flow.
Task name & notes
Double-click to edit inline. Press Enter to save, Esc to cancel.
Priority badge
Click to open a P1/P2/P3/P4 dropdown directly on the row.
Status badge
Click to open a status dropdown with all four options.
Due date
Click the date cell to open a floating date picker with Day and Week tabs. Auto-flips upward near the bottom of the screen.
Connections
Click the connections cell to open an inline popover. Add or remove connections with chips.
Email task
Click the email icon on any row to open your mail client with the task pre-filled.
Drag and drop reordering
Drag task rows to reorder them within or between sections. In the Matrix view, drag tasks between quadrants to update both priority and urgency simultaneously.
🔒 Confidential
Mark sensitive tasks to hide them from casual view — useful when the app is visible on screen during calls or meetings.
Marking tasks confidential
Set Confidential: Yes in the task modal, or click the 🔒 toggle on any existing task row.
Hiding / showing confidential tasks
Click the 🔒 icon in the header to toggle confidential visibility. When hidden, confidential rows are completely removed from view (not just blurred). Confidential tasks are hidden by default on load.
Confidential mode hides rows visually — data is still stored in localStorage. For truly sensitive data, use a separate encrypted system.
🎠Demo Mode
Instantly mask all task names and notes across every view — safe for screen-sharing, demos, or live presentations without exposing sensitive task content.
Enabling demo mode
Click the 🎠Demo button in the header (left of Done). The button turns amber when active. Click again to restore real content.
What gets masked
When demo mode is on, every task title and note is replaced word-for-word with ◠characters matching the original word lengths — preserving the visual rhythm of the text without revealing content. Masking applies across all views: All Tasks, Today, Kanban, Matrix, Weekly Review, and the AI Debrief panel.
The following are not masked: section names, people/connections, priority labels, due dates, outcomes, and status badges — so the app still looks structurally complete during a demo.
Persistence
Demo mode is session-only — it resets automatically on page reload. It is not saved to localStorage.
Recurring Tasks
Mark a task as Recurring to auto-advance its due date each time you complete it.
- Open the task modal and set Task Type = Recurring.
- Set the Recurrence interval (e.g. every 7 days, every 1 month).
- When you check the task complete, the system:
- Saves a completed archive copy of the task
- Advances the original task's due date by the interval
- Resets the original task status to "To Do"
- Shows a toast confirming the next cycle date
Recurring tasks are great for regular reviews, monthly reports, weekly 1:1 prep, and any task with a fixed cadence.
âš™ï¸ Settings Panel (v9.10)
Click the âš™ï¸ button in the top header bar to open the unified Settings panel. Five tabs cover all app configuration in one place.
âš™ï¸ Categories tab
Manage your task sections. Reorder sections by dragging the â £ handle, change icons by clicking the emoji, add new sections, or delete unused ones.
👤 People tab (v9.2)
Manage your known connections list and groups.
Individuals — people and organizations that auto-complete in task forms and appear in the By Person filter.
- Add — type a name and press Enter or click + Add. Updates the filter dropdown immediately.
- Delete (×) — removes them from the list. Does not remove from existing tasks.
Groups — named sets of people. Selecting a group in the filter matches tasks connected to any member of that group.
- Add Group — click + Add Group, enter a group name (e.g. "MT"), click member chips to select people, then click Save Group.
- Edit members (✎ Edit) — click to expand member chips; click a chip to toggle membership. Changes save immediately.
- Delete (🗑) — removes the group and clears it from any active filter.
Any groups you configure in Focal_data.default.js before first run will appear here. You can add, edit, and delete groups at any time in Settings.
🤖 AI tab
Configure the Anthropic API integration. The Test Connection and Save buttons appear only on this tab.
- API Key — paste your Anthropic API key (starts with
sk-ant-). Stored only in your browser's localStorage — never sent anywhere except directly toapi.anthropic.com. Get your key at console.anthropic.com. - Model — choose between Claude Haiku (fast, low cost — default) or Claude Sonnet (more capable, higher cost).
- Test Connection — sends a minimal test call to verify your key works.
- Save — persists the key and model choice.
Your API key is stored in localStorage — it is not encrypted. Focal is designed for personal single-device use. Do not use a shared or public device.
📊 Outcomes tab (v9.9)
Manage your Strategic Outcomes — the six impact categories used to tag tasks and track completions in Analytics.
- Add outcome — enter a name, pick a color, and save. Appears immediately in task forms and Analytics.
- Rename / recolor — click the edit icon on any outcome to update its name or color.
- Toggle active — hide an outcome from task forms and analytics without deleting it. Useful for seasonal or project-specific outcomes.
- Delete — removes the outcome. Existing tasks that referenced it are unaffected (the tag is simply no longer displayed).
The six default outcomes are: ARR, NRR, EBITDA, Board Commitments, Leadership / People, and Strategic Projects. Previously this was managed via a separate Outcomes button on the Matrix tab — it has been consolidated here.
📨 Task Feed tab (v9.22–9.30)
Manage the connection to your tasks.json file — the overnight Outlook extractor output.
- Connected file — when a file is linked, its filename is shown. The file handle is stored in IndexedDB so Focal can read and write it automatically on every load.
- Change File — opens the file picker to select a different
tasks.json. Use this if you move the file or want to point to a different extractor output. - Disconnect — removes the stored handle and clears all pending imported tasks from the Inbox. The
tasks.jsonfile itself is not modified. - Connect File (shown when no file is linked) — same as the first-time prompt in Inbox.
How does this work?
An overnight script (Power Automate, a scheduled Python script, or similar) reads your Outlook mailbox, Teams messages, and upcoming calendar meetings, extracts action items, and writes them to a local tasks.json file. Focal reads that file directly from your disk using the browser's File System Access API — nothing is uploaded to any server.
Required JSON schema
The tasks.json file must be a JSON array. Each item must have at minimum:
[
{
"id": "unique-string-per-item",
"source": "outlook",
"subject": "Re: Q2 forecast review",
"from": "jane.doe@example.com",
"body": "Can you send me the updated slide deck before Thursday?",
"category": "email",
"processed_at": null
}
]
Field notes:
id— any unique string (e.g. message ID or UUID). Focal uses this to avoid showing the same item twice.source—"outlook","teams", or"calendar". Controls the icon shown in Inbox.subject/from/body— displayed in the Inbox card for context.category— optional label ("email","chat","meeting").processed_at— set tonullfor new items. Focal writes a timestamp here after you triage the item, so re-runs of the extractor don't re-surface it.
Sample Power Automate prompt
Use this prompt with your automation tool or AI assistant to build the extractor:
Create a Power Automate flow that runs nightly and writes a tasks.json file
to a local folder. It should:
1. Read the last 24 hours of Outlook emails where I am in To or CC and the
email contains an action request (words like "can you", "please", "by
Friday", "action required").
2. Read Teams messages where I am @mentioned in the last 24 hours.
3. Read my calendar for meetings in the next 48 hours that need prep.
4. Write all items to C:\Users\[you]\tasks.json as a JSON array with fields:
id, source ("outlook"/"teams"/"calendar"), subject, from, body, category,
processed_at (null for new items).
5. Only include items where processed_at is null (never overwrite existing
processed items).
If Power Automate is not available, a short Python script using exchangelib or the Microsoft Graph API achieves the same result. The only requirement is a valid tasks.json in the correct schema on your local disk.
Troubleshooting
- No items appear after connecting — check that all items in the file have
processed_at: null. Items with a non-null timestamp are considered already triaged. - File permission error — the browser may have lost the stored file handle after a restart. Click Change File to re-select the file and grant access again.
- Items disappear after triage — this is expected. Focal writes
processed_atto the file after each triage action, removing the item from the Inbox on the next load. - Duplicate items — ensure your extractor assigns a stable, unique
idper message. If IDs change between runs, items will appear again.
🎨 Appearance tab (v10.1.0)
Switch between Light and Dark mode. The choice is saved to your browser and applied immediately — no page reload required. Dark mode uses a deep navy colour scheme designed for low-light environments and extended screen sessions.
- â˜€ï¸ Light — the default high-contrast white theme.
- 🌙 Dark — dark background (
#111827) with a full dark palette. All views, modals, dropdowns, and panels are fully themed.
🌠Language tab (v10.8.0)
Focal speaks seven languages. Pick yours under Settings → 🌠Language and the entire interface updates immediately — navigation tabs, filters, modal labels, toasts, Kanban columns, Matrix quadrants, Weekly Review stages, the Settings panel, all translated in place. No page reload, no second download.
- 🇬🇧 English — default.
- 🇳🇱 Nederlands — Dutch.
- 🇩🇪 Deutsch — German.
- 🇮🇹 Italiano — Italian.
- 🇧🇷 Português — Brazilian Portuguese.
- 🇪🇸 Español — Latin American Spanish.
- 🇮🇳 हिनà¥à¤¦à¥€ — Hindi (Devanagari script).
How it works: a single bundled translation file (Focal_i18n.js) ships with 451 keys × 7 languages. There are no network calls, no third-party translation APIs, and no telemetry. Your language preference is stored locally in your browser alongside the rest of your Focal data.
Coverage scope: the main interface — all navigation, filters, modal forms, dropdowns, settings tabs, context menus, toast notifications, Kanban columns, Matrix quadrants, the full Weekly Review flow, and the Prioritize panel. Some inline tooltips, AI-generated content, and rare error messages may still appear in English; these will be covered in a follow-up release.
Falling back gracefully: if a key is missing in your chosen language, Focal falls back to English. If English is also missing, it shows the key name itself — so nothing ever silently vanishes from the UI.
👥 People Tab — Groups + People, Side by Side
The People tab was a flat alphabetical list with Groups buried below it. v10.7.0 turns it into a two-column workspace: groups on the left, people on the right, with everything you need to manage memberships at a glance.
Layout
- Left column (240 px) — Groups. Top to bottom: All people (default, with the user icon and total count), Ungrouped (anyone not in a group yet), then your groups with a color dot and member count each.
- Right column — People panel. Context header (when a real group is selected), search + Add Person, the scrolling people list with sticky letter dividers, and a right-side A–Z jump rail.
What's new
- Color-coded groups. Every group has a color — assigned automatically from a 7-color palette when you create one, persisted on
S.personGroups[].color. Existing groups get a stable color on migration. - Inline group chips on every person row. See at a glance which groups someone belongs to. Click any chip to jump to that group's view.
- Initials avatar with hashed color. Each person gets a 28 px circle with their initials and a color derived from a hash of their name — visual variety without any new fields to fill in.
- Sticky letter headers. As you scroll the list, the current letter stays pinned at the top so you always know where you are.
- A–Z jump rail. Right edge of the list. Letters that have people are teal and clickable; absent letters are dimmed. One click scrolls to that section.
- Search inside the current group. The search box is context-aware: when a group is selected, it searches inside that group. When "All people" is active, it searches everyone.
- Add-to-group shortcut. When a group is selected, the Add Person button (or pressing ⎠in the search box) creates the person and adds them to that group in one keystroke.
- Rename and delete a group from a context header — pencil and trash buttons appear at the top of the right column whenever you have a real group selected. No more per-row edit buttons.
- Smart "Remove" button. When you're viewing a specific group, the trash button on each row removes that person from the group only. When viewing All people, it deletes the person entirely (with confirmation).
What didn't change
Focal's people are still simple connection labels — no emails, no profiles, no roles. The redesign keeps the data model exactly the same. Only one additive field (color) is introduced on the group schema. Your existing tasks, connections, and group memberships are untouched.
To bulk-build a group: select the group, then paste-and-Enter each name into the search box. Each press creates (or finds) the person and adds them to the active group.
🎨 App-Wide Polish
v10.6.0 cascades the v10.5 Settings redesign across the rest of Focal: contrast fixes, consistent line icons everywhere, the design's navy-slate palette in dark mode, and a third theme option that follows your OS.
Auto theme — follows Windows / macOS
The Theme tab now has three options: Light, Dark, and Auto. Auto follows your operating system's color-scheme preference and reacts live — toggle Windows or macOS dark mode while Focal is open and the app flips immediately, no reload.
Contrast fixes — every teal-background button
Bold white text on teal was failing WCAG AA contrast (about 3:1). v10.6.0 switches the foreground to a near-black with a hint of dark teal (#062018), giving 8.7:1 (AAA) on every primary button: Add Task, the mobile + floating action button, Capture, Add as Task, active filter pills, Kanban filter pills, Matrix mode toggles, and date-picker selections. Both light and dark mode get the fix.
Lucide line icons app-wide
Emoji icons have been replaced with consistent Lucide-style line icons across:
- Header buttons — Demo, Done, Backlog, Conf, Feedback, Settings, Manual, Add Task
- View tabs — Today, Kanban, Inbox, All Tasks, Matrix, Analytics, Review
- Filter pills — Recurring, Confidential, Backlog, Aging
- Mobile nav — Today, Tasks, Kanban, Inbox (was inline custom SVGs, now Lucide family)
- Person dropdown, AI buttons (Capture, AI-fill)
The previous duplicate 📋 icon is now split: All Tasks uses Lucide's list-checks, Backlog uses archive. Each meaning gets a distinct shape.
Dark navy palette
Dark mode legacy variables (--bg, --surface, --surface2, --border) now adopt the design's navy-slate scale (#0A1020 / #111A2F / #1F2C4D / #243358) so the whole app reads as one cohesive theme instead of half neutral-gray, half navy. Light mode unchanged.
Sidebar footer fix
The Settings sidebar's footer ("Focal v…") was disappearing on the People tab in some viewports. The nav groups now scroll independently while the footer stays pinned to the bottom.
Settings → 🎨 Theme → set to Auto, then toggle your OS dark mode to see Focal flip live.
âš™ï¸ Settings — New Sidebar Layout
v10.5.0 replaces Focal's cramped horizontal Settings tabs with a sidebar dialog. All sections stay visible at once, navigation is grouped by purpose, and the content pane has room to breathe.
Layout
- Sidebar (left, 248px) — three groups: Workspace (Categories · People · Outcomes), Intelligence (AI · Task Feed), System (Backup · Theme).
- Content pane (right) — each section opens with an icon + title + one-line subtitle, then the body. The content pane scrolls internally; the sidebar stays fixed.
- Last-opened tab is remembered — reopening Settings returns you to where you were.
- Mobile-responsive — below ~720px width, the sidebar collapses into a horizontal scroller above the content.
New design system
Settings now uses Focal's new --fcl-* design tokens — cool slate/navy in dark mode, clean off-white in light mode. Lucide-style line icons replace emoji throughout Settings (gear, tag, users, sparkles, target, database, palette, etc.) for visual consistency. Toggle switches, segmented controls, and badge dots match the v1 handoff exactly.
Theme tab — what's new
- Appearance is now a segmented control (Light · Dark) instead of stacked radio buttons.
- Density (new in v10.5.0, wired up in v10.5.1) — Compact / Cozy / Roomy. Resizes task rows (All Tasks), Today cards, Kanban cards, Matrix tiles, Inbox cards, and Settings list rows. Cozy is the default.
- Reduce motion (new) — an explicit toggle, in addition to honoring the OS-level
prefers-reduced-motionsetting automatically.
AI tab — what's new
- Field-row layout with hint text beside each control, matching the design spec.
- Show/hide API key eye-toggle next to the password input — clicking switches the field between dots and plain text. Never defaults to visible.
- Test connection and Save buttons moved into the AI body itself (previously in a global modal footer).
Backup tab — what's new
- Card-style "Auto-backup" section with a CONNECTED badge dot, file/last-save/error rows, and aligned action buttons.
- Lucide icons on every action: Download (Export), Upload (Import), Save (Save now), Refresh (Restore), Unlink (Disconnect), Link (Connect).
- Safety snapshots now show as actionable rows with type badge, timestamp, size, section/task count, and Preview / ↺ Restore / Delete buttons.
Settings, density, and reduce-motion preferences live in S.settings. They sync via auto-backup just like your tasks.
💾 Backup & Restore
Your Focal data lives in your browser's localStorage — fast, private, offline. But browser data can be wiped (cache clear, profile reset, "Clear site data") and there's no cloud sync by default. v10.4.0 adds two ways to back it up — manual export and silent auto-save to a file you choose.
Open it
âš™ï¸ Settings → 💾 Backup
A. Manual export / import (every browser)
- ⬇ Export JSON — downloads a complete snapshot to your Downloads folder, named
focal-backup-YYYY-MM-DD.json. Drop it into OneDrive / iCloud / Dropbox for off-device safety. - ⬆ Import JSON — pick a previously exported file to restore. Focal validates the structure first, then asks for confirmation showing incoming vs. current task counts. Your existing state is saved as a
focal_v1_prerestore_*snapshot before the overwrite, so you can always roll back.
B. Auto-backup to a file (Chrome / Edge)
Click 🔗 Connect backup file…, pick a location (e.g. Documents\focal-backup.json), and Focal writes to that exact file silently on every change. Pair it with a synced folder (OneDrive, iCloud Drive, Dropbox, Google Drive) and your Focal data follows you across devices with zero server.
- ↻ Save now — force a write immediately (useful before closing your laptop).
- ↺ Restore from file — pull the latest state from the backup file (e.g. after editing on another device).
- ✕ Disconnect — forget the file. Manual export still works.
Writes are debounced ~500 ms, so rapid edits coalesce into a single save. The "Last save" timestamp on the Data tab confirms the most recent successful write.
Auto-save uses the File System Access API, available in Chrome and Edge but not Safari or Firefox. On unsupported browsers, the Connect button is disabled and you'll see a prompt to use Manual Export instead.
Safety snapshots (v10.9.6)
Whenever something dangerous happens — a restore, or recovery from corrupted storage — Focal automatically saves a copy of your previous state. These appear in Settings → 💾 Backup as actionable rows. Each row shows:
- Type badge — PRE-RESTORE (saved before you ran a restore) or CORRUPTED (saved when Focal detected bad data on load).
- Timestamp — friendly format: "Today · 2:38 PM" or "May 17 · 10:14 AM".
- Size, sections, tasks — quick content summary.
- Preview — expand an inline panel showing section names and task counts. Read-only.
- ↺ Restore — restores this snapshot. Your current state is saved as a new PRE-RESTORE snapshot first, so you can always undo the undo.
- 🗑 Delete — permanently removes the snapshot from localStorage (confirm required).
Cross-device workflow
- On your main machine: Connect backup file → pick
OneDrive\Documents\focal-backup.json. - On a second machine (signed in to the same OneDrive): Connect backup file → pick the same file.
- On the second machine: click ↺ Restore from file to pull the latest state.
Note: this is "manual sync" — there's no real-time merge. If you edit on both machines simultaneously, the most recent write wins.
ðŸ›¡ï¸ Hardening Pass
v10.3.0 is a no-new-features release focused on robustness, accessibility, and data safety. The behaviour and storage schema are unchanged — you do not need to do anything.
What changed
| Area | Improvement |
|---|---|
| Security | Connection names, section titles, outcome names and search results are now HTML-escaped everywhere they render — no risk of stray markup or scripts from imported or AI-generated text. |
| Data safety | If browser storage is full, you now see "âš ï¸ Browser storage full — your change was NOT saved" instead of silent data loss. The analytics log is auto-trimmed as an emergency fallback. |
| Corruption recovery | If saved data is unreadable, Focal preserves the bad blob under a focal_v1_corrupted_* key and shows a recovery toast — you can copy it out of DevTools. |
| Long titles | Tasks with extremely long titles or unbroken URLs no longer push columns off-screen in All Tasks, Today, Matrix, Kanban or Inbox. Connection chips with long names truncate with an ellipsis. |
| Invalid dates | Malformed due dates from imports or AI capture are rejected with a toast instead of silently breaking overdue/aging logic. Recurring monthly tasks on day 31 now roll forward correctly (e.g. Jan 31 → Feb 28). |
| Dark mode | Better contrast on hint text (WCAG AA-compliant), stronger card shadows, and red analytics deltas now use a dark-friendly red. |
| Keyboard nav | Filter pills, view tabs, mobile nav and context-menu items are now reachable with Tab and activate on Enter or Space. View tabs respond to ↠/ → / Home / End. |
| Modals | Modal dialogs now trap Tab focus inside the form and expose proper role="dialog" and aria-modal for screen readers. |
| Focus rings | Visible teal focus rings on every interactive surface when navigating by keyboard. |
| Reduced motion | Honors prefers-reduced-motion — animations are disabled for users who request it at the OS level. |
If you ever see the corruption-recovery toast, go to Settings → 💾 Backup → Safety snapshots, find the CORRUPTED row, and click ↺ Restore to recover with one click. DevTools → Application → Local Storage still works as a fallback.
💬 In-App Feedback
Click the 💬 Feedback button in the top header to send feedback, report a bug, or request a feature. The form automatically attaches app context so reports are actionable without back-and-forth.
How it works
- Click 💬 Feedback in the header (between Conf and âš™ï¸ Settings).
- Select a Category from the dropdown.
- Type your message in the Your Message field (required).
- Optionally expand â–¶ What we'll include to preview the auto-attached context.
- Click ✉ Send Feedback — your default email client opens with a pre-filled Markdown message ready to send.
Category options
| Category | When to use |
|---|---|
| 🛠Bug Report | Something isn't working as expected |
| 💡 Feature Request | New functionality you'd like to see |
| 🎨 UI/Design | Visual or usability issue |
| âš¡ Performance | Slowness or sluggishness |
| 📖 Documentation | Unclear help or manual content |
| 🔄 Workflow/UX | A flow that could work better |
| 🔒 Data/Privacy | Data concern or question |
| 🙌 General Praise | Something you love about the app |
| â“ Question | Not sure how something works |
Auto-attached context
Every feedback report includes: app version, active view, theme, AI configuration status, browser and OS, screen resolution, task counts by status, section/connection/outcome counts, inbox size, and a timestamp. This is shown in the ▶ What we'll include disclosure before sending — no surprises.
The email is formatted in Markdown so it can be read cleanly by a human or processed by an AI assistant for triage and routing.
If your email client doesn't open automatically, a 📋 Copy button appears — click it to copy the full Markdown report to the clipboard and paste it into any email.
🤖 AI Features (v9.21, updated v10.1.0)
Focal integrates directly with the Anthropic Claude API — no additional accounts or services required. Configure your API key in âš™ï¸ Settings → AI tab. AI buttons are hidden throughout the app until a key is saved — once configured, they appear automatically in the Inbox capture bar, the task modal, and the Weekly Review.
✨ Inbox — AI → Task (single line)
Type one task in plain English in the Inbox capture bar and click ✨ AI → Task. Claude pre-fills the Add Task modal with a clean title, notes, section, priority, urgency, due date, connections, and outcomes. You review in the modal before saving.
✨ Inbox — AI → Task (batch, v9.21)
Paste a multi-line list into the capture bar and click ✨ AI → Task. Claude parses all lines in one call, scaling the token budget dynamically with list size. The preview panel shows priority, title, section, and due date per task — scroll to review the full list before confirming. A mismatch warning appears if Claude returned fewer tasks than input lines. Click Create N tasks to save all, or Cancel to discard.
Practical limit: ~30 tasks per batch. For larger dumps split into two pastes. If you see a truncation error, that's the signal to split.
✨ Modal — AI-fill (v9.21)
Available on the Add Task modal at every creation point — All Tasks, Today, Matrix, Kanban, keyboard shortcut N. Type a free-form description or prompt in the Task Description field, then click ✨ AI-fill. Claude parses your text and fills all fields: the description is replaced with a clean concise title, and Priority, Due Date, Section, Urgency, Type, Connections, and Outcomes are populated. Review and save as normal.
This also works when editing an existing task — rewrite the description and re-run AI-fill to re-structure it.
The modal is protected from accidental dismissal — clicking outside the form or pressing Esc will not close it while the description field has content. Use the × button to explicitly close and discard.
🔠AI Weekly Debrief
Available on the Weekly Review Done screen after completing all review stages. Claude reads your week's data — completed tasks, open P1s, aging items, inbox count — and generates a concise executive summary in 3–4 sentences. Useful as a pre-call brief or end-of-week reflection note.
Which model to use
| Model | Best for | Cost |
|---|---|---|
| Claude Haiku (default) | All AI capture paths, quick debrief | Very low |
| Claude Sonnet | Richer debrief narrative, nuanced batch parsing | Moderate |
Haiku is the recommended default for all capture and fill operations. Switch to Sonnet only if you find the quality insufficient for complex batch imports or debrief narratives.
Keyboard Shortcuts
Keyboard shortcuts for common actions in the app.
| Key | Action |
|---|---|
| N | Open Add Task modal |
| Esc | Close modal / close popover / cancel inline edit |
| Enter | Save inline edit (task name or notes) |
| Enter | Save task modal (when cursor is in the Task Description field) |
| Enter | Add inbox item (in capture input) |
Mobile Support
The app is fully responsive below 768px with a compact layout optimised for touch.
- Header collapses to logo and Add Task button only
- Table headers are hidden; rows become compact card layout
- Mobile meta strip shows all key fields (priority, status, due date, connections) in a single row below the task name
- Fixed bottom navigation bar: Today | Tasks | FAB(+) | Kanban | Inbox
- Weekly Review is accessible via the Review tab (on mobile: scroll or use bottom nav)
The mobile layout is best for quick status checks and inbox capture. For triaging, editing, and the weekly review, the desktop view is recommended.
Tips & Tricks
Keep the active list short
Aim for <20 active tasks (To Do + In Progress). If it grows beyond that, run a mini-review: move Q4 matrix tasks to Backlog, and anything not started in 2+ weeks to Backlog.
Use Inbox as a capture reflex
Whenever something comes up in a meeting, a call, or mid-task — add it to Inbox immediately with just a title. Don't try to prioritize or categorize in the moment. Process the inbox during the weekly review.
Weekly Review is non-negotiable
The system degrades quickly without the weekly review. Inbox grows, aging tasks accumulate, backlog becomes invisible. Protect 10 minutes every week for this — it's what keeps the system trustworthy.
Use Matrix for strategic prioritisation
When everything feels urgent and important, the Matrix view forces a real ranking. If Q1 is overflowing, something in there isn't actually Q1 — move it to Q2 or delegate it.
Use Backlog intentionally
Backlog is not a dumping ground — it's an intentional "later" list. Every item in it is a commitment to review it weekly. If something has been in Backlog for 3+ review cycles without activation, consider deleting it.
Aging dots are questions, not alarms
A red aging dot doesn't mean a task is failing — it means it deserves a decision. Is it still relevant? Should it be updated, backlogged, or deleted? The "Keep" action in the weekly review is a valid answer.