experiments in a post-browser web
10
fork

Configure Feed

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

Restore README, archive design vision to notes/research

+722 -49
+379 -49
README.md
··· 1 1 # Peek 2 2 3 - A web user agent for using the web where, when, and how you want. 3 + Peek is a web user agent application designed for using the web where, when and how you want. 4 4 5 - Peek is not a browser. It's a workbench for experimenting with task-aligned interfaces for the web - making it easy to create new UI shapes for the web that fit your needs in the moment. 5 + Today's browsers are one-size-fits-all applications, cramming the vast universe of user needs across an unimaginably large web into in an unmodifiable tabbed-window design. 6 6 7 - **Status:** Concept preview. Not safe for daily use. No security audit. 7 + Peek is a web user agent that is a workbench for experimenting with task alignment - making it easy to create new user interface shapes for the web which fit our need in the moment. 8 + 9 + We often use the web with a specific goal in mind - that goal should drive the design of the interface of the web user agent. 8 10 9 11 <img width="969" alt="settings screenshot" src="settings-screenshot.png"> 10 12 13 + ## Important notes 14 + 15 + ___PEEK IS NOT A WEB BROWSER___ 16 + 17 + Peek is not a web browser, and will never be a browser in the way you are probably familiar with: There are no tabs, and no windows in the tabbed-browser-like sense of them. Peek likely does not have many other of many details we are used to in web browsers, but do not notice until they are missing. Peek may be most useful to you if you view it as an entirely different type of application than a traditional web browser. 18 + 19 + ___PEEK IS A CONCEPT PREVIEW___ 20 + 21 + Peek is not safe for daily use yet! It is a proof of concept. Do not use it for anything critical. Peek does not have the same security approach as traditional web browsers, and its security model and security user interface have not yet been determined. Peek has not had a security audit. 22 + 11 23 ## Features 12 24 13 - - **Peeks** - Keyboard-activated modal web pages (`Opt+0-9`) 14 - - **Slides** - Gesture-activated pages that slide in from screen edges (`Opt+arrows`) 15 - - **Scripts** - Background page monitors that extract and track data 16 - - **Commands** - Command palette for opening pages and executing actions 17 - - **Groups** - Tag-based page organization (like Firefox Panorama) 18 - - **Sync** - Cross-device sync between desktop, mobile, and server 25 + You can use Peek in a few ways, with more coming: 26 + 27 + - Peeks - Keyboard-activated modal chromeless web pages for quickly glancing at or interacting with pages 28 + - Slides - Keyboard- or gesture-activated modal chromeless web pages which slide in from any screen edges 29 + - Scripts - Scripts periodically executed against a web page in the background which extract data for you to route to other pages or applications, or to aggregate, store and process later 30 + 31 + In progress, or thinking about: 32 + 33 + - Commands - a graphical command entry palette (GCLI) for opening pages or executing commands against them 34 + - Groups - a way to categorize, recall and interact with groups of pages 35 + - "native" web apps - using Peek as a way to "install" web pages on the local device, as separate applications instead of just separate processes 36 + - "Peeklets" HUD - select parts of pages to add to collection which are rendered as an overlay, toggled by shortcut 37 + 38 + ### Usage 39 + 40 + - Settings 41 + * In app, `Cmd/Ctrl+r,` or launch app to open settings, or click tray icon 42 + * Configure Peeks/Slides/Scripts in settings 43 + - Peeks 44 + * `Opt+0-9` to open Peeks 45 + - Slides 46 + * `Opt+←→↑↓` to open Slides 47 + 48 + ### Peeks 49 + 50 + Peeks are keyboard activated modal chromeless web pages mapped to `Opt+0-9` and closed on blur, the `Escape` key or `cmd/ctrl+w`. 51 + 52 + ### Slides 53 + 54 + Slides are gesture activated modal chromeless web pages which slide in from left/right/bottom/top, and closed on blur, the `Escape` key or `cmd/ctrl+w`. 55 + 56 + ### Scripts 57 + 58 + Scripts periodically load a web page in the background and extract data matching a CSS selector, stores it, and notify the user when the resulting data changes. 59 + 60 + Ok, so not really "scripts" yet. But safe and effective enough for now. 61 + 62 + ## Design 63 + 64 + Many user tasks on the web are either transient, chained or persistent, data oriented, or some mix of those. Neither the document-oriented nor application-centric web meets those needs. Traditional browser makers can't meet those needs well, for many reasons. 65 + 66 + Characteristics of how we use the web, that are not addressed in contemporary web browsers: 67 + 68 + - transient 69 + - chained 70 + - persistent 71 + - data-centric 72 + - archival / evidential 73 + 74 + Some thoughts driving the design of Peek: 75 + 76 + - Web user agents should be bounded by the user, not browser vendor business models 77 + - Windows and tabs should have died a long time ago, a mixed metaphor constraining the ability of the web to grow/thrive/change and meet user needs 78 + - Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions 79 + 80 + ### Escape IZUI 81 + 82 + TODO: articulate the escape-to-leave aspect, eg you can peek from *other* applications and ESC to go back to exactly where you were without breaking the task flow. 19 83 20 - ## Quick Start 84 + Escape is an inverted zooming user interface (IZUI) design for a flexible window manager that makes possible a web user agent application than can have multiple entry points and a heterogeneous windowing ecosystem. 21 85 22 - ```bash 23 - # Requirements: Node.js 24+ 24 - nvm use 24 86 + IZUI vs ZUI 25 87 26 - # Install and run 27 - yarn install 28 - yarn debug # Development mode with devtools 29 - yarn start # Normal mode 30 - ``` 88 + * ZUIs navigate by starting from a known root and user navigates by zooming ever further in, and then back out 89 + * Escape can enter a window stack at any point, and via a variety of methods, often from outside the application 90 + * Instead of navigating by zooming in, all interfaces can zoom out to go back, using the Escape key 91 + * This design allows unbounded and diverse entry points, but with predictable behavior 92 + * Regardless of the entry point, the user always has a consistent path to familiar ground 31 93 32 - See [DEVELOPMENT.md](DEVELOPMENT.md) for full development guide. 94 + Escape navigation model 95 + * navigation base can start at any level in stack 96 + * forward navigations are added on top of stack 97 + * backwards navigations walk the stack in reverse up the tree to the root 33 98 34 - ## Architecture 99 + ## Architecture / Implementation 35 100 36 - Peek supports multiple backends sharing the same renderer code: 101 + About this space: 102 + 103 + - Web pages can themselves be navigators of the web 104 + - Embrace the app-ness of the web platform, as a way to efficiently access the document-ness 105 + - Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 106 + - Javascript is ok here 107 + 108 + Peek is designed to be modular and configurable around the idea that parts of it 109 + can run in different environments. 110 + 111 + For example: 112 + - Planning on a mobile app which syncs and runs your peeks/slides/scripts 113 + - I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data 114 + - Want cloud storage for all config and data, esp infinite history, so can do fun things with it 115 + 116 + ### Feature extensibility 117 + 118 + An extensibility model for achieving "personal web workbench" requires a few things: 119 + - UI extensibility requires OS-level window features beyond what the web allows today (also a baby step towards a minimal OS user interface) 120 + - Data harvest/transform/process/publish requires a method of moving data between features (web apps) *locally*, cf Web Actions/Intents/Applets, MCP, pubsub, MQTT etc 121 + - Portable ways of accessing network, storage and compute, which address 122 + 123 + The current implementation has only a few sketches of that world implemented, and has gone through a few iterations: 124 + - first proof of concept was all Electron - so, privileged JS 125 + - second experiment moved each feature to a separate web app running in own window scope, with access to smallest possible custom API, with one main web app loading and orchestrating the others, using pubsub for cross-app communication 126 + - third and current implementation bundles all features into one web app, with access to smallest possible custom API for platform-level capabilities 127 + 128 + The web app is loaded into custom scheme of `peek`, which provides access to a few special apis noted in the next section, allows cross-origin network access and other things. 129 + 130 + This is not ideal, as the extensibility vector is contributions to core, which too tightly bounds experimentation and innovation. 131 + 132 + However it's pretty portable given the small custom API surface area. 133 + 134 + It would be nice, but not required, to have some alignment with the WebExtension spec - blur your eyes and they're in a similar direction. 135 + 136 + ### Peek API 137 + 138 + Initially the prototype was all Electron. But that's not interesting, and doesn't 139 + really tell us anything about constraints of the web itself. 140 + 141 + So instead I asked this question: What's the minimum capability set that a web app would 142 + need to build the features I need? 143 + 144 + The answer, so far, is giving `peek` apps the following APIs: 145 + 146 + - window open/close 147 + - global hotkey registration 148 + - pubsub messaging 149 + 150 + Custom window api might be able to away entirely, by passing window.open features, working on that. 151 + 152 + ### Desktop App 153 + 154 + Proof of concept is Electron. By far the best option today for cross-platform desktop apps which need a web rendering engine. There's really nothing else remotely suited (yet). 155 + 156 + User interface: 157 + - the built-in features are all modal chromeless web pages at this point 158 + - settings UI uses custom sidebar navigation with dark mode support 159 + 160 + TODO 161 + - Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support. 162 + - Min browser might be interesting as a forkable base to work from and contribute to, if they're open to it. At least, should look more at the architecture. 163 + 164 + ## Contribution 165 + 166 + - in proto stage 167 + - all dragons, no promises 168 + 169 + ## Development 37 170 38 171 ``` 39 - peek/ 40 - ├── app/ # Renderer (backend-agnostic) 41 - ├── extensions/ # Built-in extensions 42 - ├── backend/ 43 - │ ├── electron/ # Desktop (primary) 44 - │ ├── tauri/ # Desktop (Rust alternative) 45 - │ ├── tauri-mobile/ # iOS/Android 46 - │ └── server/ # Sync server (Node.js/Hono) 47 - └── docs/ # Documentation 172 + yarn install 173 + yarn debug 48 174 ``` 49 175 50 - ## Documentation 176 + ### Mobile 51 177 52 - | Doc | Description | 53 - |-----|-------------| 54 - | [DEVELOPMENT.md](DEVELOPMENT.md) | Development setup, commands, architecture | 55 - | [docs/api.md](docs/api.md) | Peek API reference (`window.app`) | 56 - | [docs/extensions.md](docs/extensions.md) | Extension development | 57 - | [docs/datastore.md](docs/datastore.md) | Data storage and schema | 58 - | [docs/sync.md](docs/sync.md) | Cross-device sync | 59 - | [docs/MOBILE.md](docs/MOBILE.md) | Mobile development | 178 + - Quick access to Script output and manual runs, as widgets (or output from cloud runners?) 179 + - Peeks still totes useful here - on mobile is more like "quick dial" features 60 180 61 - ## Design Philosophy 181 + ### Cloud 62 182 63 - - Web pages can be navigators of the web 64 - - User tasks on the web are transient, chained, persistent, or data-oriented - none well-served by tabbed browsers 65 - - The "Escape IZUI" pattern: enter at any point, ESC always returns to familiar ground 66 - - Minimum viable API surface for web apps to access platform capabilities 183 + - Going full crypto payments for distributed compute on this one. 67 184 68 - See [notes/extensibility.md](notes/extensibility.md) for detailed design notes. 185 + ## Papercut / use-case log 69 186 70 - ## Contributing 187 + Core high level actions 188 + - open a web page on top/bottom/left/right 189 + - keep web pages persistent in the background 190 + - quickly open a web page modally, and close it 71 191 72 - Concept stage - contributions welcome but expect dragons. 192 + Misc specific 193 + - open bandcamp in a window, move over to 2nd display, accidently close it while moving around between other windows 194 + - recent books or recipes from newsletters i subscribe to (but probably didn't read) 195 + - extract a table from a page periodically, send it somewhere as csv or whatever (chained actions) 196 + - collect microformats, metadata, events 197 + - web page w/ some locations as an input to a map (creates overlay) "map this page" 198 + - be able to see where a book/etc recommendation came from 199 + - save a tweet, with URL / image / relevant text, but not whole page webrecorder style 200 + - "watch local event listings, rate against my music listening patterns and send me shows i might be interested in going to" 201 + 202 + Content scripts 203 + - extract+log shazams 204 + - extract+log spotify playlist 205 + 206 + Calculators (variant of script + cmd?) 207 + - page -> table 208 + - page -> summary 209 + - page -> microsummaries 210 + - page -> dates 211 + - page -> events 212 + 213 + Workflow deconstructing a "why" task flavour of bookmarking 214 + - save https://www.criterionchannel.com/hong-kong-in-new-york 215 + - extract the movies 216 + - get reference metadata for each (?!) 217 + - add to "to watch list", with pointer back to source url 218 + 219 + ## Groups 220 + 221 + - panorama/tabcandy-ish 222 + - all browser history 223 + - smart groups vs curated groups 224 + - autoclustering on topic/date 225 + - escape from a new page enters default group? 226 + 227 + Groups + Cmds 228 + - top/bottom inputs for filtering/grouping/etc 229 + - implemented is a cmd input? 230 + - cmds for opening/searching/finding/viewing/filtering/piping 231 + - cmds for moving pages into groups 232 + - groups -> {x} (eg export/pipe) could depend on the chaining/piping bit (see below) 233 + 234 + Architecture 235 + - internally is tags? 236 + - static vs dynamic groups tho? 237 + 238 + Publishing 239 + - publishing groups as internal/public feeds? 240 + - to pinboard? 241 + 242 + ## History view/search 243 + 244 + A lot of groups work depends on history being in place, and being accessable and annotate-able. 245 + 246 + ideally use chromium history 73 247 74 - ## License 248 + storage+access 249 + - check out Agregore history viewing approach 250 + - check out state of electron+webext 251 + - other way of accessing underlying chromium history? 252 + 253 + features 254 + - awesomebar algo scoring 255 + - adaptive matching 256 + 257 + ## Chaining / piping 258 + 259 + investigate: vague thought re chaining: 260 + - dynamic interstitial representations 261 + - mime type detection? 262 + - eg image previews 263 + - or a table of data 264 + - previews of cmds? 265 + 266 + interfaces 267 + - horizontal vs vertical chains 268 + - back/forward navigation? 269 + - each step is a cmd+preview? 270 + - dynamic cmd+previews? 271 + 272 + import/export/undo/redo 273 + - record/replay? 274 + - save a chain as a compound action (cmd)? 275 + 276 + architecture 277 + - look at web actions/intents/applets 278 + - xml pipeline language 279 + 280 + ## Mobile 281 + 282 + - some of the features don't make sense as-is on mobile 283 + - but maybe quick access on mobile to slides/peeks would be nice 284 + - and seeing output of content scripts, or ability to re-run locally on demand 285 + - needs some sync facility (inevitable anyway) 75 286 76 - MIT 287 + ## Use-cases 288 + 289 + Peeks 290 + - translate 291 + - calendar 292 + - ai chat 293 + - currency conversion 294 + - everytimezone 295 + - tldraw 296 + 297 + Slides 298 + - music: Soundcloud, Hypem 299 + - stock prices 300 + - notepad 301 + - todo list 302 + 303 + Scripts 304 + - weather change, eg upcoming weather 305 + - crypto prices 306 + 307 + Cmd - web 308 + - open url 309 + - web search 310 + - image search 311 + - conversions? 312 + - ddg !actions 313 + 314 + Cmd - system 315 + - search browser history 316 + - set peeks/slides 317 + - open settings 318 + - restart app 319 + - llm prompts 320 + 321 + Future 322 + - address something to switch between 323 + - pipe from/to? 324 + 325 + Publishing high level 326 + - author web content 327 + - pull in bits from the web 328 + - share preview for feedback 329 + - publish (or at least get output) 330 + 331 + Publishing examples 332 + - writing an event recap 333 + 334 + Publishing: event recap post 335 + - make a new markdown doc 336 + - sections titled for each video title 337 + - each video's embed code in each section 338 + - navigate around the document for review and updates 339 + - need to easily preview rendered content 340 + - share preview link 341 + - publish (somewhere?) 342 + 343 + Music 344 + - commands 345 + - views 346 + - last.fm of my own, to POSSE out 347 + 348 + ## Unfiled 349 + 350 + markdown hot reload previewer w/ toc 351 + - markdown support, with sidebar nav 352 + - reader mode 353 + - hot reload for file:// (other?) 354 + - add side-by-side view 355 + - once md and side-by-side, add side-by-side so the md is the nav, content is the preview 356 + - what's the cmd chain for this? 357 + 358 + content types + chaining 359 + - cmd: view as… table, feed, markdown, data points, named entities 360 + - chain: static archive, publish, save, share (os), mailto 361 + - cmd params, eg {url}, which can themselves autocomplete (eg history) 362 + 363 + multiprotocol 364 + - at 365 + - ipfs/ipns 366 + - pragmatic addressing+rendering for data (r/d/masl + mime handlers) 367 + 368 + broader patterns (chatting w/ luke) 369 + - why do we have to copy/paste? 370 + - devtools and ide are divorced 371 + 372 + chainframe/framechain 373 + - (web intents/applets/actions) + (webxdc/miniapps/tiles/farcasterframes) 374 + 375 + Small examples of agency 376 + 377 + - users can move, resize, change things to their requirements 378 + - eg, browsers restrict min-height of a window, but i should be able make as short as i like 379 + 380 + ## History 381 + 382 + In working on Firefox and related things at Mozilla from 2006 - 2019, there were a few specific initiatives which best aligned with my needs as a user on the web: 383 + 384 + - The Awesomebar: infinite history + personalized local search index 385 + - Ubiquity: Natural language commands + chaining 386 + - Jetpack: The Mozilla Labs version - web-platfrom-centric extensibility 387 + - Panorama: née TabCandy, web pages as groups instead of tabs in windows 388 + 389 + A few others which were in the right direction but didn't achieve their optimal form: 390 + 391 + - Greasemonkey 392 + - Microsummaries 393 + - Contacts extension 394 + 395 + The first version of the Peek application has some bits of each of these, and the original Peek browser extension. 396 + 397 + ### Peek browser extension 398 + 399 + Peek was a browser extension that let you quickly peek at your favorite web pages without breaking your flow - loading pages mapped to keyboard shortcuts into a modal window with no controls, closable via the `Escape` key. 400 + 401 + However, as browser extension APIs became increasingly limited, it was not possible to create a decent user experience and I abandoned it. You can access the extension in this repo [in the extension directory](/autonome/peek/extension/). 402 + 403 + The only way to create the ideal user experience for a web user agent that *Does What I Want* is to make it a browser-ish application, and that's what Peek is now. 404 + 405 + 406 +
+343
notes/research/design-vision.md
··· 1 + # Peek Design Vision 2 + 3 + Design thinking, use cases, and research notes extracted from early README. 4 + 5 + ## Core Design Philosophy 6 + 7 + Many user tasks on the web are either transient, chained or persistent, data oriented, or some mix of those. Neither the document-oriented nor application-centric web meets those needs. Traditional browser makers can't meet those needs well, for many reasons. 8 + 9 + Characteristics of how we use the web, that are not addressed in contemporary web browsers: 10 + 11 + - transient 12 + - chained 13 + - persistent 14 + - data-centric 15 + - archival / evidential 16 + 17 + Some thoughts driving the design of Peek: 18 + 19 + - Web user agents should be bounded by the user, not browser vendor business models 20 + - Windows and tabs should have died a long time ago, a mixed metaphor constraining the ability of the web to grow/thrive/change and meet user needs 21 + - Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions 22 + 23 + ## Escape IZUI 24 + 25 + TODO: articulate the escape-to-leave aspect, eg you can peek from *other* applications and ESC to go back to exactly where you were without breaking the task flow. 26 + 27 + Escape is an inverted zooming user interface (IZUI) design for a flexible window manager that makes possible a web user agent application than can have multiple entry points and a heterogeneous windowing ecosystem. 28 + 29 + ### IZUI vs ZUI 30 + 31 + * ZUIs navigate by starting from a known root and user navigates by zooming ever further in, and then back out 32 + * Escape can enter a window stack at any point, and via a variety of methods, often from outside the application 33 + * Instead of navigating by zooming in, all interfaces can zoom out to go back, using the Escape key 34 + * This design allows unbounded and diverse entry points, but with predictable behavior 35 + * Regardless of the entry point, the user always has a consistent path to familiar ground 36 + 37 + ### Escape navigation model 38 + * navigation base can start at any level in stack 39 + * forward navigations are added on top of stack 40 + * backwards navigations walk the stack in reverse up the tree to the root 41 + 42 + ## Architecture Principles 43 + 44 + About this space: 45 + 46 + - Web pages can themselves be navigators of the web 47 + - Embrace the app-ness of the web platform, as a way to efficiently access the document-ness 48 + - Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 49 + - Javascript is ok here 50 + 51 + Peek is designed to be modular and configurable around the idea that parts of it can run in different environments. 52 + 53 + For example: 54 + - Planning on a mobile app which syncs and runs your peeks/slides/scripts 55 + - I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data 56 + - Want cloud storage for all config and data, esp infinite history, so can do fun things with it 57 + 58 + ## Feature Extensibility 59 + 60 + An extensibility model for achieving "personal web workbench" requires a few things: 61 + - UI extensibility requires OS-level window features beyond what the web allows today (also a baby step towards a minimal OS user interface) 62 + - Data harvest/transform/process/publish requires a method of moving data between features (web apps) *locally*, cf Web Actions/Intents/Applets, MCP, pubsub, MQTT etc 63 + - Portable ways of accessing network, storage and compute, which address 64 + 65 + The current implementation has only a few sketches of that world implemented, and has gone through a few iterations: 66 + - first proof of concept was all Electron - so, privileged JS 67 + - second experiment moved each feature to a separate web app running in own window scope, with access to smallest possible custom API, with one main web app loading and orchestrating the others, using pubsub for cross-app communication 68 + - third and current implementation bundles all features into one web app, with access to smallest possible custom API for platform-level capabilities 69 + 70 + The web app is loaded into custom scheme of `peek`, which provides access to a few special apis noted in the next section, allows cross-origin network access and other things. 71 + 72 + This is not ideal, as the extensibility vector is contributions to core, which too tightly bounds experimentation and innovation. 73 + 74 + However it's pretty portable given the small custom API surface area. 75 + 76 + It would be nice, but not required, to have some alignment with the WebExtension spec - blur your eyes and they're in a similar direction. 77 + 78 + ## Peek API Design 79 + 80 + Initially the prototype was all Electron. But that's not interesting, and doesn't really tell us anything about constraints of the web itself. 81 + 82 + So instead I asked this question: What's the minimum capability set that a web app would need to build the features I need? 83 + 84 + The answer, so far, is giving `peek` apps the following APIs: 85 + 86 + - window open/close 87 + - global hotkey registration 88 + - pubsub messaging 89 + 90 + Custom window api might be able to away entirely, by passing window.open features, working on that. 91 + 92 + ## Desktop App Notes 93 + 94 + Proof of concept is Electron. By far the best option today for cross-platform desktop apps which need a web rendering engine. There's really nothing else remotely suited (yet). 95 + 96 + User interface: 97 + - the built-in features are all modal chromeless web pages at this point 98 + - settings UI uses custom sidebar navigation with dark mode support 99 + 100 + TODO: 101 + - Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support. 102 + - Min browser might be interesting as a forkable base to work from and contribute to, if they're open to it. At least, should look more at the architecture. 103 + 104 + ## Mobile Vision 105 + 106 + - Quick access to Script output and manual runs, as widgets (or output from cloud runners?) 107 + - Peeks still totes useful here - on mobile is more like "quick dial" features 108 + - some of the features don't make sense as-is on mobile 109 + - but maybe quick access on mobile to slides/peeks would be nice 110 + - and seeing output of content scripts, or ability to re-run locally on demand 111 + - needs some sync facility (inevitable anyway) 112 + 113 + ## Cloud Vision 114 + 115 + - Going full crypto payments for distributed compute on this one. 116 + 117 + --- 118 + 119 + ## Use Cases & Papercuts 120 + 121 + ### Core High Level Actions 122 + - open a web page on top/bottom/left/right 123 + - keep web pages persistent in the background 124 + - quickly open a web page modally, and close it 125 + 126 + ### Specific Use Cases 127 + 128 + - open bandcamp in a window, move over to 2nd display, accidently close it while moving around between other windows 129 + - recent books or recipes from newsletters i subscribe to (but probably didn't read) 130 + - extract a table from a page periodically, send it somewhere as csv or whatever (chained actions) 131 + - collect microformats, metadata, events 132 + - web page w/ some locations as an input to a map (creates overlay) "map this page" 133 + - be able to see where a book/etc recommendation came from 134 + - save a tweet, with URL / image / relevant text, but not whole page webrecorder style 135 + - "watch local event listings, rate against my music listening patterns and send me shows i might be interested in going to" 136 + 137 + ### Content Scripts 138 + - extract+log shazams 139 + - extract+log spotify playlist 140 + 141 + ### Calculators (variant of script + cmd?) 142 + - page -> table 143 + - page -> summary 144 + - page -> microsummaries 145 + - page -> dates 146 + - page -> events 147 + 148 + ### Workflow: Deconstructing a "why" Task Flavor of Bookmarking 149 + - save https://www.criterionchannel.com/hong-kong-in-new-york 150 + - extract the movies 151 + - get reference metadata for each (?!) 152 + - add to "to watch list", with pointer back to source url 153 + 154 + --- 155 + 156 + ## Groups Design 157 + 158 + - panorama/tabcandy-ish 159 + - all browser history 160 + - smart groups vs curated groups 161 + - autoclustering on topic/date 162 + - escape from a new page enters default group? 163 + 164 + ### Groups + Cmds 165 + - top/bottom inputs for filtering/grouping/etc 166 + - implemented is a cmd input? 167 + - cmds for opening/searching/finding/viewing/filtering/piping 168 + - cmds for moving pages into groups 169 + - groups -> {x} (eg export/pipe) could depend on the chaining/piping bit (see below) 170 + 171 + ### Architecture 172 + - internally is tags? 173 + - static vs dynamic groups tho? 174 + 175 + ### Publishing 176 + - publishing groups as internal/public feeds? 177 + - to pinboard? 178 + 179 + --- 180 + 181 + ## History View/Search 182 + 183 + A lot of groups work depends on history being in place, and being accessable and annotate-able. 184 + 185 + ideally use chromium history 186 + 187 + ### Storage+Access 188 + - check out Agregore history viewing approach 189 + - check out state of electron+webext 190 + - other way of accessing underlying chromium history? 191 + 192 + ### Features 193 + - awesomebar algo scoring 194 + - adaptive matching 195 + 196 + --- 197 + 198 + ## Chaining / Piping 199 + 200 + investigate: vague thought re chaining: 201 + - dynamic interstitial representations 202 + - mime type detection? 203 + - eg image previews 204 + - or a table of data 205 + - previews of cmds? 206 + 207 + ### Interfaces 208 + - horizontal vs vertical chains 209 + - back/forward navigation? 210 + - each step is a cmd+preview? 211 + - dynamic cmd+previews? 212 + 213 + ### Import/Export/Undo/Redo 214 + - record/replay? 215 + - save a chain as a compound action (cmd)? 216 + 217 + ### Architecture 218 + - look at web actions/intents/applets 219 + - xml pipeline language 220 + 221 + --- 222 + 223 + ## Feature Use Cases 224 + 225 + ### Peeks 226 + - translate 227 + - calendar 228 + - ai chat 229 + - currency conversion 230 + - everytimezone 231 + - tldraw 232 + 233 + ### Slides 234 + - music: Soundcloud, Hypem 235 + - stock prices 236 + - notepad 237 + - todo list 238 + 239 + ### Scripts 240 + - weather change, eg upcoming weather 241 + - crypto prices 242 + 243 + ### Cmd - Web 244 + - open url 245 + - web search 246 + - image search 247 + - conversions? 248 + - ddg !actions 249 + 250 + ### Cmd - System 251 + - search browser history 252 + - set peeks/slides 253 + - open settings 254 + - restart app 255 + - llm prompts 256 + 257 + ### Future 258 + - address something to switch between 259 + - pipe from/to? 260 + 261 + --- 262 + 263 + ## Publishing 264 + 265 + ### High Level 266 + - author web content 267 + - pull in bits from the web 268 + - share preview for feedback 269 + - publish (or at least get output) 270 + 271 + ### Example: Event Recap Post 272 + - make a new markdown doc 273 + - sections titled for each video title 274 + - each video's embed code in each section 275 + - navigate around the document for review and updates 276 + - need to easily preview rendered content 277 + - share preview link 278 + - publish (somewhere?) 279 + 280 + ### Music 281 + - commands 282 + - views 283 + - last.fm of my own, to POSSE out 284 + 285 + --- 286 + 287 + ## Unfiled Ideas 288 + 289 + ### Markdown Hot Reload Previewer w/ TOC 290 + - markdown support, with sidebar nav 291 + - reader mode 292 + - hot reload for file:// (other?) 293 + - add side-by-side view 294 + - once md and side-by-side, add side-by-side so the md is the nav, content is the preview 295 + - what's the cmd chain for this? 296 + 297 + ### Content Types + Chaining 298 + - cmd: view as… table, feed, markdown, data points, named entities 299 + - chain: static archive, publish, save, share (os), mailto 300 + - cmd params, eg {url}, which can themselves autocomplete (eg history) 301 + 302 + ### Multiprotocol 303 + - at 304 + - ipfs/ipns 305 + - pragmatic addressing+rendering for data (r/d/masl + mime handlers) 306 + 307 + ### Broader Patterns (chatting w/ luke) 308 + - why do we have to copy/paste? 309 + - devtools and ide are divorced 310 + 311 + ### Chainframe/Framechain 312 + - (web intents/applets/actions) + (webxdc/miniapps/tiles/farcasterframes) 313 + 314 + ### Small Examples of Agency 315 + - users can move, resize, change things to their requirements 316 + - eg, browsers restrict min-height of a window, but i should be able make as short as i like 317 + 318 + --- 319 + 320 + ## Project History 321 + 322 + In working on Firefox and related things at Mozilla from 2006 - 2019, there were a few specific initiatives which best aligned with my needs as a user on the web: 323 + 324 + - **The Awesomebar**: infinite history + personalized local search index 325 + - **Ubiquity**: Natural language commands + chaining 326 + - **Jetpack**: The Mozilla Labs version - web-platfrom-centric extensibility 327 + - **Panorama**: née TabCandy, web pages as groups instead of tabs in windows 328 + 329 + A few others which were in the right direction but didn't achieve their optimal form: 330 + 331 + - Greasemonkey 332 + - Microsummaries 333 + - Contacts extension 334 + 335 + The first version of the Peek application has some bits of each of these, and the original Peek browser extension. 336 + 337 + ### Peek Browser Extension 338 + 339 + Peek was a browser extension that let you quickly peek at your favorite web pages without breaking your flow - loading pages mapped to keyboard shortcuts into a modal window with no controls, closable via the `Escape` key. 340 + 341 + However, as browser extension APIs became increasingly limited, it was not possible to create a decent user experience and I abandoned it. You can access the extension in this repo [in the extension directory](/autonome/peek/extension/). 342 + 343 + The only way to create the ideal user experience for a web user agent that *Does What I Want* is to make it a browser-ish application, and that's what Peek is now.