## Done

- Hover effects
- Deduplication
- Tags editor
- Sort by active date
- Tags view
- Backup
- Tags expand/collapse
- favicons
- Full line hover
- Main dimensions in rem
- Icon tooltips and hovers
- Topic focus
  - Tags collapse all / collapse all except (focus)

- Sort pages within tags by recency
- Fix deduping vs Tabvana
- Code organization; delete extraneous
- Sort tags by recent usage vs. alphabetical
- Bulk Operations
  - Multiselect tabs, bulk delete, snooze, open
- Replace tag selector
- Autotag
  - Heuristics: same window, one hop forward/back of opener/opened

- Multiselect again
  - clear selection when switching modes?
- Click to select, double-click to open
- Backup again
- Exclude Tabvana itself
- Pagers \*\*\*
  - remove slice(). Lazy-load on scroll
- Bulk tag edit
  - Edit row or selection? Restrict editing non-selected rows??
  - Don't tag selected and other row
- Details pane
- Cache favicons? Nah, browser cache should handle that
- URL normalization
- Select window
- Cleanup
- Cleanup tooltip
- Show the number of duplicates

Hotness: sort by number of visits

- Find often-visited but untagged pages
  - Untagged view, sorted by hotness

Global search key binding

## TODO

### P0

Stash flow
Quick stash/unstash/todo/untodo
Auto unstash when applying another tag
Todo and stash get clickable icons ("flag" and "shopping cart"?)
Stash only pages with no other tag -> done ("cleanup")?
Stash == Awaiting triage. Either tag or unstash it.

- but not immediately? hmm
- maybe don't unstash while selected?
- Cleanup button like OF
  Deleting tags from an item has no effect, i.e. it doesn't return to the stash
  Unstashing an item removes it from the stash, so it becomes untagged
  Pages can be explicitly stashed or unstashed

Revisit "Cleanup"

Async / slow operations

- Search: cancel async?
- Async busy? -> busy indicator
- Progress bar

Make the delete button less prominent?

### P1

Hot sort: sort by number of visits (maybe weighted by recency?)

- Far too slow.
- Find often-visited but untagged pages

### P2

Todos

- Add TODO items and durations. Basically duplicate OmniFocus.
- Due dates, defer dates, repeating dates, ...
- Both de-novo todo items and todo features on pages
- Snooze button -> revisit in 1 day / 1 week
- Bind tags to todos
- Hierarchies

More fast navigation

- Ctrl-click context menus on PageRow, etc.
- Key bindings
  - Delete
  - Arrow keys
  - Enter to open?

Chrome integration

- Add a memorized link button to the context menu (??)
- Throttle updates from chrome Windows

Extension-level

- Always on top, popup mode...

Bugs

- Tag in stash mode doubles the row ??
- Don't play YouTube on open
- Window accessTimes borked

Stash & Untagged \*\*\*

- Save window state (before shutdown)
- Stash sort orders & grouping
- Unstash on activate
- Stash and other tags should be mutually exclusive?
- Limit the display of untagged things in Tabvana or sort them by date

Fast Triage

- "Forgettable" tag
- Forgettable patterns, aka Block
- "Clean up" button == dedup, forgettable, old..., then stash?
- Always-open (don't stash) = Pinned
- Configurable rules -> buttons
- Cleanup modes
  - Stash all
  - Stash all except Pinned
  - Stash untagged
  - Stash untagged, close all except Pinned

Search

- Search box, Hotkey (replace Shift-Cmd-A?)
- P3 Multiple search tabs
- P3 Collect results from Google, Moma, Drive, Buganizer, Critique
- Allow filtering the search by open tabs (by default? At the top? Like Chrome behavior)

Special tags with a tab, e.g. "Starred" -> bad crutch?

- Tag focus => add tab (and then, context menu to delete tab)
- Pin tags to the top

Autotags

- Test openedUrls, openerUrl
- Easily approve/reject autotags
- Autotag TF.js model
- Regex autotags? Auto tag by search
- "more like this"? Normal autotag should do that?
- Autotag toggle
- Autotags view: per tag, reverse sort by confidence. multiselect and accept.

Multiselect

- Collect into new window
- When opening all in a window, open them in their own window
- Stash others

Import TabsOutliner

Counts everywhere

Time series

- Print last touched date ("yesterday", etc.) per tag, per page
- Group by date with disclosure triangle
- Use accesstimes to plot activity by tag vs. time

Window actions

- Select window
- Tag whole window
- Forget whole window?? (If untagged...)
- Snooze whole window

Aesthetics / CSS

- Header / menu bar immune to scroll
- Admin menu
- Tags editor aesthetics
- Tags view aesthetics
- Make title -> tags boundary draggable
- Collapse transitions (windowshade)
- Material UI throughout
- Tab UI for windows vs. tags -> DONE
- Tag-selector dimensions in rem
- Action icons appear on hover
- Don't scroll headers
- Dup = red dot
- tabtitle should fill vertical space, as click target
- Disappear unused icons

Scroll to active (for Untagged??) -> attempted, didn't work?

Switch to view in context (per window or per tag)

Global Actions

- Global Snooze, or snooze all except tag
- Undo/Redo

Tag Actions

- Tag names editable
- Forget, Snooze, Rename + Merge
- Archive topics
- Topic badges with # of TODO/urgent
- per tag current vs. archived section. Hour/day/\* week/month/all
- Tags sort by recency
- Color tags
- Doubleclick to focus

Page actions

- TODO/flagged/urgent, and filter for those
- Explicit autotag rules e.g. #doc #bug
- Maybe use #todo #flagged etc. to distinguish special tags
- Equivalence rules (ditch query params?), or collapse pages into sets
- Thin out AccessTimes, or bin them in 5 min increments in the first place?
- Auto-archiving / stale indicator
- Forget untagged / ephemeral

Related Tags

Backups

- Restore
- Automatic backup every 5 min, cycling
- Auto-restore backup if corrupted?
- Schema evolution

Inspector

- Readable layout with appropriate details
- See former Tooltip stuff
- Activity sparkline

Heuristics preferences: windows should have no more than N tabs, M tags, etc.

Window sets by topic (incl. multi monitor layout??)

Separate tab from window

Extension Icon Popup

- Injected header on every page?
- Edit tags
- For each tag, click to see related pages
- For each tag, collect all active related pages into one window

Timer to update relative times continuously

Multiple windows

- One is main
- management: close, duplicate, etc.

Which window should tabs open in??

- New one
- By topic

Google Chat windows per topic!!

Deduping rules

- Let user declare dups, and learn since the rules are different for every site

Deleting tab from Tags window doesn't delete it from other Windows window? Oh yes it does, there was a dup

Nothing recorded when main window is closed?

Window actions

- Select all

CustomTagSelector

- colors / highlights / line weight
- Tag add button like OF

Integrations

- Automatically link to Matching GMail tags
- Pocket link: Tabvana as Pocket UI? Batch import, with "Pocket" tag?

URL Normalization

- Customize removing query string per domain
- Ignore domains (e.g., Meet, Moma)
- Configurable URL normalization regex: ignore query params on some domains but not others (even: ignore some params but not others)

Selection

- Unselect items when they go out of scope
- Select All, Apple-A
- Drag-multiselect
- Collect selection into window (and focus!)
- Select all in window
- Select all in tag

Ergonomics

- Right-click menus throughout
- Keyboard navigation
  - Arrow keys change selection
- Make the tab manager delete button less prominent
  - Replace with context menu?
  - "Block"? -> block pattern, per custom normalization
- Doubleclick a tag to focus it?
- Respond to windows focus switching

Previews?

Window activation

- When does double-click actually take you to the page?
- Focus on Options window
- Generally: how to select which window something opens in??
  - Maybe the one with the most matching tags?

Code cleanup

Blocked

- Something unstashed shouldn't be restashed? Just delete?

Sort orders / view settings

- Group by tag, in "open" mode and in search

Regroup / cluster windows by tag...??? Hard with multiple tags...

### P3

Timers (like Pomodoro timers? Per tab, per window, per tag ??)

Dedup within selection

Cut and paste... but from where to where??

## Hard things for later

Configurable columns (notes, flags, due date, ...)

- Per-row action buttons on hover

Drag & drop tabs among windows

Make tags hierarchical; Tags tree with drag&drop

Sync service

Treemap

Deep page munging integrations

- Put tab search results in the google search results

Chrome sub window tiling manager

Tabvana multicolumn or 2d tags view

Treemap

## Maybe fixed?

Window accesstime not persisted / resets upon reload??

Open each tag on search

## Wat??

Make the tab extension accept targeted URLs

## Random thoughts

Principle: short search paths

# More to sort

## Structure

- Main
  - Todos
  - All Windows
    - WindowTabList
      - TabRow\*
        - PageRow
    - Inspector
      - Sort/group options
  - All Tags
    - FlexView: Tags
      - CollapsibleTag\*
        - Pager state & UI
        - TagPageList
          - PageRow\*
      - Inspector
        - Sort/group options
  - Stash / Untagged
    - FlexView: singletag
      - Pager state & UI
      - TagPageList
        - PageRow\*
      - Inspector
        - Sort/group options
  - Search Results
    - SearchResult
      - FlexView: Tags, Pages
        - CollapsibleTag\*
          - Pager state & UI
          - TagPageList
            - Sort & Pager (DB)
            - PageRow\*
        - RawPageList
          - Sort & Pager (Slice)
          - PageRow\*
        - Inspector
          - Sort/group options

FlexView

- Tags
  - TagPageList
    - Pager

# New notes

Open == Not in stash. May have tags or not.

Propose tag: most frequent word in titles? Find similar existing tag?

Highlight related pages on hover

Recency slider

Refactor dispatch inside async thunk to extraReducers?
https://stackoverflow.com/questions/70663663/pros-cons-of-using-extra-reducers-vs-dispatching-within-async-thunk

Queue for long-running background tasks like similarity computations etc.

- Similar-pages ngram search could identify keywords and suggest them as tags
- Intended usage of Flagged?
  - Mark "key" pages to distinguish them from ephemeral noise. Different icon? Star? Key? "Importance" checkmarks 1/2/3?

Autotags accept all, reject all
Show recent dates in Tabvana
Import Pocket into Tabvana
Switching between tabs should cluster them
Put a tree map in the tab manager
Revisit / Defer until: distribute reading tasks within given timescale (e.g., over the next month, year, etc.)
Ordered Queue (e.g., docs to review)
Mirror OF "Planned" dates?

Backup warning is borked

Open windows view should have group by window selector

Represent selection as a checkbox, not highlight

Keep a queue (in the database) of operations to perform in the background.  For each current async operation, consider whether it is a purely fire-and-forget thing, and if so, add it to the queue so that it happens in the service worker instead of the main thread.

When "empty page title" is encountered, try to fetch the title from the URL.  Maybe best to do this as part of the "renormalize" operation.  If the URL doesn't load or another error occurs, make the title "Error" or something so it doesn't keep throwing the "empty page title" error. 