experiments in a post-browser web
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

Reorganize TODO.md and verify completed items

- Confirm done: desktop sync, theming, portability, extensions, window dragging, notes in datastore, backups, action history
- Clean up "already done?" questions with verified status
- Reorganize sections with clearer structure
- Multi-user confirmed for server (desktop uses profile isolation)

+311 -276
+311 -276
TODO.md
··· 11 11 Be able to use the app on mobile and desktop with the safety of knowing there's also at least one remote copy. 12 12 13 13 Today 14 - - [ ][desktop] titlebar investigation and controls: why do some window.open links show titlebars? add universal hide/show pref, commands, and show on hover at top edge 15 - - [ ][mobile] fix big bottom bar showing again 16 14 17 15 Later 18 - - [ ][dekstop] first real look at the web page experience - see Page loading experience section 19 - - [ ] tags on desktop 16 + 20 17 - [ ][desktop] access to notes on filesystem, syncing them as markdown files in ~/sync/Notes/peek 21 - - [ ] profile/account switching in desktop and iOS 22 18 23 19 ## To process 24 20 25 21 Unclear / needs context: 26 - - [ ] demo script (see use-case sticky) 27 - - [ ] consolidate peek notes in signal to a peek note (copy all, have the robots format it) 22 + - [ ] import signal note-to-self archive into peek notes 28 23 - [ ] implement old context plan eg https://www.reddit.com/r/hackernews/comments/1qddidm/sun_position_calculator/ 29 24 - [ ] step counter: app level interaction tracing/counting. when is reset? when does action end and new one start? 30 25 - [ ] tabstats for peek 31 26 - [ ] peeks/slides as tagged addresses with metadata properties? 32 27 - [ ] edgeworkernode/server vs what we got now (both?) 33 28 34 - ## Ready for triage 29 + misc 30 + - [ ] click modifier to one-off peek a link 31 + - [ ] option to flash keyboard shortcuts on screen 32 + - [ ] pop up a board of built-in shortcuts/actions 33 + - [ ] pop up a board of common shortcuts/actions you use 34 + 35 + App dev 36 + - [ ] shared libs, eg utils 37 + - [ ] language: call them feature or apps? other? extensions? mods? 38 + 39 + Navigation 40 + - [ ] make izui stack manager (part of window mgr?) 41 + - [ ] esc stack: from feature settings back to core settings 42 + - [ ] add to izui stack (and ix w/ history?) 43 + - [ ] interactions between peek:// and other 35 44 36 - ### Data Model & Multi-platform Unification 45 + 46 + ## Data Model & Multi-platform Unification 37 47 38 48 - [x] merge peek-node into peek repo (now at backend/server/) 39 49 - [x] resolve differences between mobile, node and desktop data models 40 - - [ ] prepare for multi-user, in the data model and at the filesystem level 50 + - [x] prepare for multi-user, in the data model and at the filesystem level (server has full multi-user; desktop uses profile isolation) 41 51 - [x] update peek-node to support multi-user and the core types (already supports multi-user with API keys) 42 - - [ ] try DuckDB as datastore storage backend instead of SQLite 43 52 44 - ### Sync Infrastructure 53 + ## Profiles 45 54 46 - - [ ] get desktop sync working 47 - - [ ] sync 55 + data model and on-disk 56 + - [ ][desktop] profile at OS level, eg the electron+chromium profile (and tauri) 57 + - [ ][mobile] switches db 58 + - [ ][server] switches db 59 + - [ ] profiles across platform are connected by api key for now 60 + - [ ] each profile has key generated at creation time 61 + - [ ] get key from one to initialize sync with another 62 + - [ ] profile creation asks for optional api key from an existing profile 63 + 64 + mobile/desktop 65 + - [ ][desktop] settings app has profiles section 66 + - [ ][mobile] settings pane has profiles section 67 + - [ ] there's a default profile 68 + - [ ] can add named profiles 69 + - [ ] can switch profiles (reloads almost entirety of app) 70 + - [ ] can delete profiles (prompt - no undo!) 71 + - [ ] profiles only deleted on device, does not sync 72 + - [ ] must always have at least one profile 73 + 74 + ## Sync Infrastructure 75 + 76 + - [x] get desktop sync working (bidirectional sync implemented) 48 77 - [ ] mobile notes, server notes, desktop notes (make sync server dumber) 49 - - [ ] url+tag sync means groups on mobile/web/desktop 50 - - [ ] pull in from server node, configure in settings (pull from peek mobile and peek node) 78 + - [x] pull in from server node, configure in settings (sync config in settings UI) 51 79 52 - ### Notes & Editor 80 + ## Commands - Settings Navigation 53 81 54 - Editor 55 - - [ ] support for paste operations 56 - - [ ] todo/done tags get special checkbox rendering 82 + - [ ] Add commands for settings nav sections: core, extensions, themes, datastore, diagnostic 83 + - [ ] Add commands to open specific extension settings 57 84 58 - A Peek for local notes using editor 59 - - [ ] how to address a specific note in the editor? 60 - - [ ] maybe we need path or name-based ways of addressing "docs" in datastore? 85 + ## Theming 61 86 62 - - [ ] using for notes (md dir sync, import stickies) 87 + Core theming is done (themes/, CSS variables, peek://theme/ protocol, light/dark/system modes). 63 88 64 - Editor extensibility/bundling 65 - - [ ] we probably want it included by default 66 - - [ ] how - path/url in manifest for now 67 - - [ ] need a notes app, with ability to "pin" like stickies, noted as documents in the store, w/ tags eg #sticky 89 + Remaining: 90 + - [ ] review agregore/peersky approach for improvements 91 + - [ ] apply theme to http web pages (about:blank flash, user pref) 68 92 69 - ### Groups & Tags UX 93 + ## Portability 70 94 71 - - [ ] tags on desktop 72 - - [ ] tag buttons (tag + down arrow?) 73 - - [ ] tag buttons as standalone submissions - componentize, then make extension? or just notes without text? 74 - - [ ] figure out group mode (maybe needs cmd+l) 75 - - [ ] groups header overhaul 76 - - [ ] filtering search 77 - - [ ] space vs group (language) 78 - - [ ] groups == tags == cross-platform 95 + Backend abstraction done (Electron, Tauri, Tauri Mobile, Server all share app/ code). 79 96 80 - ### UI Components & Rendering 97 + Remaining: 98 + - [ ] Extension back-end (browser extension version) 99 + - [ ] Define subset of core API for portability documentation 81 100 82 - - [ ] ui rendering primitives: card, cards, button, button set, list, grid, chat, carousel, image viewer 83 - - [ ] cards + json schema 101 + ## Extensions Architecture 84 102 85 - ### Commands Enhancement 103 + Core extension system done (web pages with injected window.app API, iframe/BrowserWindow hosting). 86 104 87 - - [ ] detect URL input without http(s):// prefix, auto-add https:// and open 88 - - [ ] command tags {str} to load tag in group view 89 - - [ ] peek addresses as cmds by title (http too?) 90 - - [ ] cmd/peek history (they don't show up in cmd!) 91 - - [ ] map cmd using OSM 92 - - [ ] open kagi via cmd 93 - - [ ] search history via cmd 94 - - [ ] all commands as a button board 105 + Remaining: 106 + - [ ] configurable start-at-boot per extension 107 + - [ ] cf: https://github.com/AgregoreWeb/agregore-browser 108 + - [ ] cf: https://github.com/samuelmaddock/electron-browser-shell 95 109 96 - ### Desktop Window UX 110 + ## Chaining / Connecting 97 111 98 - - [ ] if url open in a window already, switch to it (for now) 99 - - [ ] history views (again using groups ui, maybe plug that into an extension itself?) 100 - - [ ] extension: explode windows using groups ui with transparent background and vi directionals, enter opens 101 - - [ ] click-to-drag on any window 112 + Now that we have commands, we need to be able to chain them together for more complex "workbench-y" interactions. Chaining reqs inputs/outputs (eg activities/intents/applets), so that API unlocks the rest. 102 113 103 - ### Server & Peek-Node Backend 114 + Example flow: 115 + - open a web page 116 + - cmd: show lists -> shows list of lists detected in the page 117 + - arrow up/down and choose one -> shows preview of the selected list 118 + - cmd: csv -> shows preview of csv 119 + - cmd: save file -> prompts to download 104 120 105 - - [x] update peek-node to support text/urls/tagsets (already supports urls, texts, tagsets, images) 106 - - [ ] headless sync server that's a "back-end" of Peek API… or just peek running headless? 107 - - [ ] route all external urls to peek node webhook, eg every bsky like, reddit save, oauthwonderwall? 108 - - [ ] diagnostic/status API: resource usage, overall disk usage, per-user disk stats 121 + - [ ] Connector API: Chaining reqs inputs/outputs (eg activities/intents/applets) 122 + - [ ] Determine if this should be a new API or reuses command registration 123 + - [ ] Extension API to register as a connector handler for a set of mime/types 124 + - [ ] Extension API to emit data to handlers for the specified mime type output (or maybe we allow multiple like the web clipboard API does) 125 + - [ ] Cmd support for chaining flow using "connectors" 126 + - [ ] Add Connector Handler support, so data can move one-way from a command to another 127 + - [ ] Filter first on mime type matches 128 + - [ ] Policy for determing best matching command order (using frecency + adaptive matching) 129 + - [ ] Support previewing of the data in between steps 130 + - [ ] Modular system for plugging renderers in for generating previews/editors of mime types 131 + - [ ] Doesn't need to be an extension API yet, but we'll need a way for that later maybe 132 + - [ ] Preview panel is visually connected to the cmd panel, which should stay visible or visually connected somehow 133 + - [ ] Cmd UI updates 134 + - [ ] Cmd panel can show dropdown listing matching commands 135 + - [ ] User can navigate list w/ arrow up/down, j/k and tab/shift-tab 136 + - [ ] If cmd response has a previewAddress property, show a preview pane w/ that address 109 137 110 - ### Mobile 138 + examples 139 + - [ ] execute a command which executes a userScript against a loaded page, detects list/table-ish things (with previews), lets you select one, which it exports as a "list" out (CSV? JSON?) 140 + - [ ] links on page -> list -> button cloud -> kb activate (then shorten to "link cloud" cmd) 141 + - [ ] compound cmds (like "link cloud". uses chaining? like a chain package?) 111 142 112 - - [ ] show oembed, or at least page title 113 - - [ ] api key should be optional (for local-only use) 114 - - [ ] sync now button in settings 115 - - [ ] save images to server (look at how binaries are stored) 143 + ## Modes/scopes 116 144 117 - ### Privacy & Archival 145 + notes 146 + - Pages have a specific mode, with specific hotkeys, etc. 147 + - Commands like "theme dark here" operate on the "target window". 148 + - Target window is usually what the user was looking at before opening cmd. 149 + - Currently this works but there's no visual indication. 118 150 119 - - [ ] private links and private mode pages 120 - - [ ] private section altogether (eg gift ideas) 121 - - [ ] archived entries (lower score, hidden by default) 151 + - [ ] How to do page "mode" (for example) with conditional context/hotkeys/actions 152 + - [ ] Should commands declare `scope: 'window' | 'page' | 'global'` in registration? 153 + - [ ] How does cmd indicate scope/target? 154 + - [ ] eg "Target: [window title]" header when window-scoped command is selected? 122 155 123 - ### Session & State Management 124 156 125 - - [ ] restorable snapshots, export/import 126 - - [ ] session restore 157 + ## Desktop windows 127 158 128 - ### Sharing & Publishing 159 + Window controls 160 + - [ ] titlebar investigation and controls: why do some window.open links show titlebars? 161 + - [ ] show titlebar on hover at top edge 162 + - [ ] add universal hide/show pref (default hide) 163 + - [ ] add pref to settings 164 + - [ ] command flip default 165 + - [ ] command to flip current 129 166 130 - - [ ] share system 131 - - [ ] publish pages/apps? 167 + Window persistence 168 + - [ ] window position persistence where it makes sense (settings, groups, cmd) and make configurable? 169 + - [ ] window size persistence where it makes sense (slides, peeks) and make configurable? 170 + 171 + Window size/move 172 + - [x] windows are draggable/moveable (click-and-hold in app/drag.js) 173 + - [ ] window are resizable 174 + - [ ] pin window on top (app) 175 + - [ ] pin window on top (os) 176 + - [ ] window.open api param for draggable 177 + - [ ] window.open api param for resize 178 + - [ ] cmds for all of this 179 + 180 + Window interaction/integration 181 + - [ ] configurable escape behavior per-window 182 + 183 + Window animations 184 + - [ ] add window open animation (to/from coords, time) to openWindow 185 + - [ ] update slides impl to use animation again 186 + 187 + Window layout (depends on ui components) 188 + - [ ] tile/untile, eg the Explode extension 189 + - [ ] explode: windows using groups ui with transparent background and vi directionals, enter opens 190 + 191 + 192 + ## UI Componentry 193 + 194 + reactive schema+card+data system 195 + - [ ] cards + json schema + data? 196 + - [ ] ui rendering primitives: card, cards, button, button set, list, grid, chat, carousel, image viewer 197 + 198 + popup carousel system 199 + - [ ] see ~/sync/Sites/base/hud.html/css/js for basic ui system 200 + - [ ] horizontal and vertical carousel components 201 + - [ ] active item focused in popup 202 + - [ ] arrow controls and vim directionals 203 + - [ ] port cmd chaining to horizontal carousel popups 204 + - [ ] port cmd previews to vertical carousel popups 205 + 206 + window templates 207 + - [ ] eg page overlay 132 208 133 - ### Chaining & Compound Commands 209 + button groups 210 + - [ ] add/remove/both modes 211 + - [ ] on/off mode 134 212 135 - - [ ] execute a command which executes a userScript against a loaded page, detects list/table-ish things (with previews), lets you select one, which it exports as a "list" out (CSV? JSON?) 136 - - [ ] links on page -> list -> button cloud -> kb activate (then shorten to "link cloud" cmd) 137 - - [ ] compound cmds (like "link cloud". uses chaining? like a chain package?) 213 + tags 214 + - [ ] tag input field 138 215 139 - ### Extensions Architecture 216 + ## Web page experience 140 217 141 - - [ ] extensions as *web* pages/tiles accessing injected api 142 - - [ ] start at boot? 143 - - [ ] app+browser history swiss army knife for querying and generating url lists via chaining, saving for offline (->txt) etc, maybe using connectors 144 - - [ ] cf: https://github.com/AgregoreWeb/agregore-browser 145 - - [ ] cf: https://github.com/samuelmaddock/electron-browser-shell 218 + Page loading core 219 + - [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay?? 220 + - [ ] overlay infrastructure for showing metadata, security info 221 + - [ ] maybe this requires window templates? 222 + - [ ] interaction with cmd actions (page mode again?) 146 223 147 - ### NER & Entity Extraction 224 + Basic nav etc 225 + - [ ] hotkey to select url 226 + - [ ] back/forward 227 + - [ ] reload 228 + - [ ] undo last close 229 + - [ ] if url selected in cmd is open in a window already, switch to it (for now) 148 230 149 - - [ ] get people, places, dates/times/events 150 - - [ ] get meaningful numbers, and their label 151 - - [ ] extract a table as csv 152 - - [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page) 231 + Page info/metadata/action widgets (depends on window templates maybe?) 232 + - [ ] defaults, eg sec ui 233 + - [ ] metadata (og, whatnot) 234 + - [ ] media (imgs, rss, etc) 235 + - [ ] actions (new extension cmd type?) 236 + - [ ] scripts (tbd) 153 237 154 - ### WebExtensions Support 238 + ## Pagestream 155 239 156 - - [ ] ubo 157 - - [ ] proton pass 158 - - [ ] bpc 240 + - a new peek web navigational system 241 + - vertical up/down chat-style history of pages/actions 242 + - left/right for page-specific stuff 243 + - maybe uses carousels + window template from ui componentry? 159 244 160 - ### Feeds & Time-series 245 + ## Notes & Editor 161 246 162 - - [ ] tag streaks -> atproto streaks (feeds + daytum) 163 - - [ ] hud for system data (number of windows, etc - using timeseries/feeds in datastore + page metadata / daytum / widgets framework) (widget sheets? kinda like window manager views/templates?) 247 + Editor 248 + - [ ] include by default from ~/misc/peek-editor 249 + - [ ] support for paste operations 250 + - [ ] settings option for url to external editor (expects peek connector support), defaults to built-in address 251 + - [ ] tags in content detected, added/removed from tag system 164 252 165 - ### Misc 253 + Notes app 254 + - [ ] see all notes 255 + - [ ] filtering search on notes 256 + - [ ] click to edit 257 + - [ ] how to address a specific note in the editor? 258 + - [ ] maybe we need path or name-based ways of addressing "docs" in datastore? 166 259 167 - - [ ] click modifier to one-off peek a link 168 - - [ ] option to flash keyboard shortcuts on screen 169 - - [ ] pop up a board of built-in shortcuts/actions 170 - - [ ] pop up a board of common shortcuts/actions you use 171 - - [ ] back/forward shortcuts for web pages 260 + Integrations 261 + - [ ] local dir sync 262 + - [ ] import macos stickies 172 263 173 - ## Desktop Performance 264 + Stickies 265 + - [ ] cards layout primitive (requires UI componentry?) 266 + - [ ] "pin" notes to stickies using a tag 174 267 175 - - [ ] Reduce startup time (currently ~550ms build) 176 - - [ ] Pre-compiled TypeScript: skip tsc during dev if no changes 177 - - [ ] Lazy extension loading: load on first access instead of startup 178 - - [ ] Suspend inactive tabs (reduce memory for background pages) 179 - - [ ] Performant BrowserWindow unloading (fully release resources when not needed) 268 + Requires chaining and connectors 269 + - [x] Notes in datastore (items table with type='text') 270 + - [ ] List editor 180 271 181 - ## Groups 272 + ## Groups & Tags UX 182 273 183 274 - [ ] Define relationship between page groups and tags (are they the same? different views?) 184 - - [ ] Searchable/indexable command API for dynamic content (e.g., group names, bookmarks) 185 - - [ ] Refresh dynamic group commands when groups change (after tagging) 275 + 276 + Groups 277 + - [ ] Visually communicate group-active (a "mode"? see Mode/scope section) 278 + - [ ] Determine which new-page routes qualify for staying in group vs not 279 + - [ ] When group-active, qualifying new pages are automatically tagged as in the group 280 + - [ ] Determine how/when to exit group for new pages opened (eg from external app) 281 + 282 + mobile 283 + - [ ] filtering search of tags in tag input box 284 + - [ ] view tag groups 285 + 286 + cmd 287 + - [ ] port tagging ui from mobile, eg: 288 + - [ ] see and be able to remove already added tags 289 + - [ ] input box for typing new tags and filtering unselected tag list 290 + - [ ] unselected tag list, each as clickable button 291 + 292 + tagsets 293 + - [ ] 294 + 295 + general 296 + - [ ] space vs group (language) 297 + 298 + desktop 299 + - [ ] figure out group mode (maybe needs cmd+l) 300 + - [ ] groups header overhaul 186 301 187 302 ## Commands 188 303 189 - - [ ] Add commands for settings nav sections: core, extensions, themes, datastore, diagnostic 190 - - [ ] Add commands to open specific extension settings 304 + - [ ] detect URL input without http(s):// prefix, auto-add https:// and open 305 + - [ ] command tags {str} to load tag in group view 306 + - [ ] peek addresses as cmds by title (http too?) 307 + - [ ] cmd/peek history (they don't show up in cmd!) 308 + - [ ] map cmd using OSM 309 + - [ ] open kagi via cmd 310 + - [ ] search history via cmd 311 + - [ ] all commands as a button board 312 + 313 + - [ ] app+browser history swiss army knife for querying and generating url lists via chaining, saving for offline (->txt) etc, maybe using connectors 191 314 192 - ## Window-Targeted Commands UX 193 315 194 - Commands like "theme dark here" operate on the "target window" - the window the user was looking at before opening the cmd palette. Currently this works but there's no visual indication. 316 + ## Server Backend 195 317 196 - UX improvements: 197 - - [ ] Commands declare `scope: 'window' | 'page' | 'global'` in registration? 198 - - [ ] Cmd panel shows "Target: [window title]" header when window-scoped command is selected 318 + - [x] update peek-node to support text/urls/tagsets (already supports urls, texts, tagsets, images) 319 + - [ ] headless sync server that's a "back-end" of Peek API… or just peek running headless? 320 + - [ ] route all external urls to peek node webhook, eg every bsky like, reddit save, oauthwonderwall? 321 + - [ ] diagnostic/status API: resource usage, overall disk usage, per-user disk stats 199 322 200 - ## Devtools 323 + ## Mobile 201 324 202 - - [ ] Devtools button in extension settings cards (open devtools for extension window) 203 - - [ ] Devtools command to open devtools for a specific extension or window 204 - - [ ] Fix `api.extensions.devtools()` - currently not working for consolidated extensions 325 + - [ ] fix big bottom bar showing again 326 + - [ ] show oembed, or at least page title 327 + - [ ] save images to server (look at how binaries are stored, and across profiles) 205 328 206 - ## Entity centrism (NER streams) 329 + ## Session & State Management 207 330 208 - - [ ] Entity catalog definition (eg Wikidata defs, or custom to start?) 209 - - [ ] Datastore support 210 - - [ ] Basic NER testing (regex, etc) 211 - - [ ] Page metadata viz 212 - - [ ] Entity search/browse 213 - - [ ] ML NER 331 + - [x] backup/restore snapshots (daily automated + manual in backend/electron/backup.ts) 332 + - [ ] export/import 333 + - [ ] session restore 214 334 215 335 ## Browser status quo extensibility 216 336 ··· 229 349 230 350 Web extensions 231 351 - [ ] WebExtension integration for priority only, on some platforms 232 - 233 - ## Minimum viable web workbench 234 - 235 - - [ ] Design philosophy write-up w/ driving principles and characteristics 236 - - [ ] Multi-protocol architecture 237 - - [ ] Content publishing 238 - - [ ] Event model 239 - - [ ] Chaining 240 - - [ ] Images 241 - - [ ] Lists/feeds 242 - 243 - ## Editor & Notes 244 - 245 - Requires chaining and "activities" 246 - 247 - - [ ] Notes in datastore 248 - - [ ] Editor app (in/out datastore) 249 - - [ ] Vim mode 250 - - [ ] List editor 251 - 252 - ## Theming 253 - 254 - - [ ] customizable theme(s) 255 - - [ ] portable/packageable system 256 - - [ ] extension variant, or is there a standard/convention? 257 - - [ ] extensions can import/use in their web content 258 - - [ ] review agregore/peersky approach 259 - - https://github.com/AgregoreWeb/agregore-browser/issues/289 260 - - https://github.com/AgregoreWeb/agregore-browser/pull/291 261 - - https://github.com/p2plabsxyz/peersky-browser/pull/43 262 - - [ ] update default theme in peek 263 - - [ ] start with styles in ~/misc/peek-mobile 264 - - [ ] look at applying/changing default theme for http web pages 265 - - [ ] reflect system theme (eg about:blank should not be always a white flash before page load) 266 - - [ ] reflect peek configured theme 267 - 268 - ## UI Componentry 269 - 270 - - [ ] popup system 271 - - [ ] see ~/sync/Sites/base/hud.html/css/js 272 - - [ ] design for pagestream, eg vertical up/down chat-style history of pages/actions, w/ left/right for page-specific stuff (maybe uses window template?) 273 - - [ ] port cmd chaining and previews 274 - - [ ] window templates? 275 - - [ ] eg page overlay 276 - - [ ] button groups 277 - - [ ] add/remove/both modes 278 - - [ ] on/off mode 279 - - [ ] tag input field 280 - - [ ] reactive schema+card+data framework 352 + - [ ] ubo 353 + - [ ] proton pass 354 + - [ ] bpc 281 355 282 356 ## Feeds, time-series, scripts 283 357 ··· 288 362 - [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho) 289 363 - [ ] Page load triggers for background scripts 290 364 291 - ## Page loading experience 365 + - [ ] tag streaks -> atproto streaks (feeds + daytum) 366 + - [ ] hud for system data (number of windows, etc - using timeseries/feeds in datastore + page metadata / daytum / widgets framework) (widget sheets? kinda like window manager views/templates?) 292 367 293 - Core 294 - - [ ] determine how we load pages - raw browserwindow (what we do now), webview in an html page? 295 - - [ ] overlay infrastructure for showing metadata, security info, extension widgets etc 296 - - [ ] (maybe this requires window templates, but not for first take) 297 - - [ ] Page metadata 298 - - [ ] Interaction with cmd actions 368 + ## Entity centrism (NER streams) 299 369 300 - Page model & metadata 301 - - [ ] Basic overlay 302 - - [ ] Page embedding 370 + - [ ] get people, places, dates/times/events 371 + - [ ] get meaningful numbers, and their label 372 + - [ ] extract a table as csv 373 + - [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page) 303 374 304 - Web Platform 305 - - [ ] need a web loader that's not full BrowserWindow maybe? 306 - - [ ] sandboxing 307 375 308 - Later 309 - - [ ] pageinfo widgets - defaults, scripts, metadata, media, actions 376 + - [ ] Entity catalog definition (eg Wikidata defs, or custom to start?) 377 + - [ ] Datastore support 378 + - [ ] Basic NER testing (regex, etc) 379 + - [ ] Page metadata viz 380 + - [ ] Entity search/browse 381 + - [ ] ML NER 310 382 311 - ## v? - Chaining / Connecting 383 + ## Archiving / expiration 312 384 313 - Now that we have commands, we need to be able to chain them together for more complex "workbench-y" interactions. Chaining reqs inputs/outputs (eg activities/intents/applets), so that API unlocks the rest. 385 + - [ ] archived notes (lower score, hidden by default) 314 386 315 - Example flow: 316 - - open a web page 317 - - cmd: show lists -> shows list of lists detected in the page 318 - - arrow up/down and choose one -> shows preview of the selected list 319 - - cmd: csv -> shows preview of csv 320 - - cmd: save file -> prompts to download 387 + ## Sorting/scoring/magic 321 388 322 - - [ ] Connector API: Chaining reqs inputs/outputs (eg activities/intents/applets) 323 - - [ ] Determine if this should be a new API or reuses command registration 324 - - [ ] Extension API to register as a connector handler for a set of mime/types 325 - - [ ] Extension API to emit data to handlers for the specified mime type output (or maybe we allow multiple like the web clipboard API does) 326 - - [ ] Cmd support for chaining flow using "connectors" 327 - - [ ] Add Connector Handler support, so data can move one-way from a command to another 328 - - [ ] Filter first on mime type matches 329 - - [ ] Policy for determing best matching command order (using frecency + adaptive matching) 330 - - [ ] Support previewing of the data in between steps 331 - - [ ] Modular system for plugging renderers in for generating previews/editors of mime types 332 - - [ ] Doesn't need to be an extension API yet, but we'll need a way for that later maybe 333 - - [ ] Preview panel is visually connected to the cmd panel, which should stay visible or visually connected somehow 334 - - [ ] Cmd UI updates 335 - - [ ] Cmd panel can show dropdown listing matching commands 336 - - [ ] User can navigate list w/ arrow up/down, j/k and tab/shift-tab 337 - - [ ] If cmd response has a previewAddress property, show a preview pane w/ that address 389 + - [ ] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you 338 390 339 - ## v? - Publishing, Provenance, Remote Extensions? 340 - 341 - - [ ] poke at remote loading + provenance 342 - 343 - ## Portability 344 - 345 - - [ ] Back-end implementations 346 - - [ ] Mobile (webview) back-end 347 - - [ ] Extension back-end 348 - - [ ] Define subset of core API for portability 349 - 350 - ## Tagging & Groups 351 - 352 - Groups 353 - - [ ] Visually communicate group-active 354 - - [ ] Determine which new-page routes qualify for staying in group vs not 355 - - [ ] When group-active, qualifying new pages are automatically tagged as in the group 356 - - [ ] Determine how/when to exit group for new pages opened (eg from external app) 357 - 358 - ## v? Windowing model 391 + ## Desktop Performance 359 392 360 - - [ ] active vs transient modality 361 - - [ ] configurable escape behavior per-window 393 + - [ ] Reduce startup time (currently ~550ms build) 394 + - [ ] Pre-compiled TypeScript: skip tsc during dev if no changes 395 + - [ ] Lazy extension loading: load on first access instead of startup 396 + - [ ] Suspend inactive tabs (reduce memory for background pages) 397 + - [ ] Performant BrowserWindow unloading (fully release resources when not needed) 362 398 363 - ## Window features 399 + ## Private mode 364 400 365 - Window features 366 - - [ ] add draggable as pref, eg an opener can specify undraggable (draggable is default) 367 - - [ ] same for resize (but user can override?) 401 + - [ ] private links and private mode pages 402 + - [ ] private section altogether (eg gift ideas) 368 403 369 404 ## Demos / Tutorials / Comms 370 405 ··· 374 409 - [ ] Slides: soundcloud, crypto prices, notepad, todo list 375 410 - [ ] Scripts: stock price, weather change 376 411 377 - ## Unprioritized future 412 + ## History 413 + 414 + - [ ] history views (again using groups ui, maybe plug that into an extension itself?) 415 + 416 + History (depends on ui primitives) 417 + - [x] store central app action history (visits table with source, duration, metadata) 418 + - [ ] history viewer 419 + - [ ] history search 420 + - [ ] Infinite lossless personal encrypted archive of web history 421 + 422 + ## Publishing, Provenance, Remote Extensions? 423 + 424 + - [ ] share system 425 + - [ ] poke at remote loading + provenance 426 + - [ ] publish pages/apps? 427 + - [ ] local publishing w/ Helia or something like this 378 428 379 - App mgmt 380 - - [ ] uniform policy for feature id creation (lean on web/extensions) 381 - - [ ] deal with collisions 429 + ## Minimum viable web workbench 382 430 383 - App dev 384 - - [ ] app model - web? extension? P/IWA? other? 385 - - [ ] shared libs, eg utils 386 - - [ ] language: call them feature or apps? other? extensions? mods? 431 + - [ ] Design philosophy write-up w/ driving principles and characteristics 432 + - [ ] Multi-protocol architecture 433 + - [ ] Content publishing 434 + - [ ] Event model 435 + - [ ] Chaining 436 + - [ ] Images 437 + - [ ] Lists/feeds 387 438 388 - Navigation 389 - - [ ] make izui stack manager (part of window mgr?) 390 - - [ ] esc stack: from feature settings back to core settings 391 - - [ ] add to izui stack (and ix w/ history?) 439 + ## Devtools 392 440 393 - Window animations 394 - - [ ] add window open animation (to/from coords, time) to openWindow 395 - - [ ] update slides impl to use animation again 441 + - [ ] Devtools button in extension settings cards (open devtools for extension window) 442 + - [ ] Devtools command to open devtools for a specific extension or window 443 + - [ ] Fix `api.extensions.devtools()` - currently not working for consolidated extensions 396 444 397 - Window controls/persistence/etc (after perma window) 398 - - [ ] window position persistence where it makes sense (settings, groups, cmd) and make configurable? 399 - - [ ] window size persistence where it makes sense (slides, peeks) and make configurable? 400 - - [ ] window controls 401 - - [ ] window resizers 402 - - [ ] cmds for all of this 403 445 404 - History 405 - - [ ] store central app action history 446 + ## Later 406 447 407 - Window layout 408 - - [ ] tile/untile 448 + - [ ] try DuckDB as datastore storage backend instead of SQLite 409 449 410 - After that 411 - - [ ] Tray 412 - - [ ] Identity 413 - - [ ] Contacts 450 + - [ ] Tray work 451 + - [ ] Identities system? 452 + - [ ] Contacts integration 414 453 - [ ] Collaboration 415 - 416 - Further 417 - - [ ] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you 418 - - [ ] Infinite lossless personal encrypted archive of web history 419 454 420 455 ## Done 421 456