experiments in a post-browser web
10
fork

Configure Feed

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

fix rdme

+131 -131
+131 -131
README.md
··· 4 4 5 5 ** WARNING: THIS IS VACATIONWARE ** 6 6 7 - * Peek is not a web browser! Yet! And likely never will be a browser as you would expect from browsers to date. There are no tabs, and no windows in the tabbed-browser-like sense of them. If that's what you're looking for, there are a few decent browsers for you to choose from. 8 - * Peek is not safe for general use yet! It is a crude proof of concept I whipped up while on vacation. While I have thoughts on security model and user interface, I have not written it up into a proper security model yet. 7 + - Peek is not a web browser! Yet! And likely never will be a browser as you would expect from browsers to date. There are no tabs, and no windows in the tabbed-browser-like sense of them. If that's what you're looking for, there are a few decent browsers for you to choose from. 8 + - Peek is not safe for general use yet! It is a crude proof of concept I whipped up while on vacation. While I have thoughts on security model and user interface, I have not written it up into a proper security model yet. 9 9 10 10 <img width="969" alt="CleanShot 2023-04-03 at 18 50 22@2x" src="https://user-images.githubusercontent.com/50103/229501558-7084d66e-962a-4c0f-a10e-11787ef3ce68.png"> 11 11 ··· 13 13 14 14 Many user tasks on the web are either transient, chained or persistent, data oriented, or some mix of those. The document-oriented web does not meet those needs. Major browser vendors can't meet those needs well, for many reasons. 15 15 16 - * transient 17 - * chained 18 - * persistent 19 - * data oriented 16 + - transient 17 + - chained 18 + - persistent 19 + - data oriented 20 20 21 21 About this space: 22 - * Embrace the app-ness aspect of the web platform, less about the document-ness 23 - * Javascript is ok here 24 - * Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 22 + - Embrace the app-ness aspect of the web platform, less about the document-ness 23 + - Javascript is ok here 24 + - Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 25 25 26 26 ## Features 27 27 28 28 You can use Peek in a few ways, with more coming: 29 29 30 - * Peeks - Keyboard activated modal chromeless web pages 31 - * Slides - Keyboard or gesture activated modal chromeless web pages which slide in from any screen edges 32 - * Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes 30 + - Peeks - Keyboard activated modal chromeless web pages 31 + - Slides - Keyboard or gesture activated modal chromeless web pages which slide in from any screen edges 32 + - Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes 33 33 34 34 In progress: 35 - * Commands 36 - * Groups 35 + - Commands 36 + - Groups 37 37 38 38 Thinking about: 39 39 - "native" web apps ··· 56 56 57 57 Some thoughts driving the design of Peek: 58 58 59 - * Web user agents should be bounded by the user, not browser vendor business models 60 - * 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 61 - * Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions 59 + - Web user agents should be bounded by the user, not browser vendor business models 60 + - 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 61 + - Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions 62 62 63 63 ## User values 64 64 ··· 67 67 68 68 ## Design patterns 69 69 70 - * Escape IZUI 70 + - Escape IZUI 71 71 * IZUI: inverse zooming user interface 72 72 * ZUIs navigate by starting from a known root and user navigates by zooming ever further in 73 73 * Escape starts anywhere, and instead of navigating by zooming in, all interfaces can zoom out to reset ··· 84 84 Peek is designed to be modular and configurable around the idea that parts of it can run in different environments. 85 85 86 86 For example: 87 - * Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts 88 - * I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data 89 - * Want cloud storage for all config and data, esp infinite history, so can do fun things with it 87 + - Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts 88 + - I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data 89 + - Want cloud storage for all config and data, esp infinite history, so can do fun things with it 90 90 91 91 ### Desktop App 92 92 ··· 95 95 The user interface is just Tweakpane panels and modal chromeless web pages rn. 96 96 97 97 TODO 98 - * Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support. 99 - * 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. 98 + - Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support. 99 + - 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. 100 100 101 101 ### Usage 102 102 103 - * Settings 103 + - Settings 104 104 * In app, `cmd/ctl+r,` or launch app to open settings, or click tray 105 105 * Configure Peeks/Slides/Scripts in settings 106 - * Peeks 106 + - Peeks 107 107 * `Opt+0-9` to open Peeks 108 - * Slides 108 + - Slides 109 109 * `Opt+←→↑↓` to open Slides 110 110 111 111 ### Mobile 112 112 113 - * Quick access to Script output and manual runs, as widgets (or output from cloud runners?) 114 - * Peeks still totes useful here - on mobile is more like "quick dial" features 113 + - Quick access to Script output and manual runs, as widgets (or output from cloud runners?) 114 + - Peeks still totes useful here - on mobile is more like "quick dial" features 115 115 116 116 ### Cloud 117 117 118 - * Going full crypto payments for distributed compute on this one. 118 + - Going full crypto payments for distributed compute on this one. 119 119 120 120 ## Daily Papercut Log 121 121 ··· 124 124 ## Roadmap 125 125 126 126 Core moduluarization 127 - [x] Modularize feature types, eyeing the extensibility model 128 - [x] move settings window to features/settings 127 + - [x] Modularize feature types, eyeing the extensibility model 128 + - [x] move settings window to features/settings 129 129 130 130 App cleanup 131 - [x] main window vs settings 132 - [x] change settings shortcut from global+esc to opt+comma 131 + - [x] main window vs settings 132 + - [x] change settings shortcut from global+esc to opt+comma 133 133 134 134 Window lifecycle 135 - [x] modularize window open/close + hidden/visible 136 - [x] update settings, peeks, slides, scripts 137 - [x] hide/show window vs create fresh 138 - [x] update slides impl to use openWindow (x, y) 135 + - [x] modularize window open/close + hidden/visible 136 + - [x] update settings, peeks, slides, scripts 137 + - [x] hide/show window vs create fresh 138 + - [x] update slides impl to use openWindow (x, y) 139 139 140 140 Minimal Electron + Maximal Web 141 - [x] move features to all web code, with a couple special apis 142 - [x] make globalShortcut an api like openWindow 141 + - [x] move features to all web code, with a couple special apis 142 + - [x] make globalShortcut an api like openWindow 143 143 144 144 Create core app 145 - [x] core settings 146 - [x] registers other features 145 + - [x] core settings 146 + - [x] registers other features 147 147 148 148 Move all features to web implementation 149 - [x] move all possible code from the electron file to the web app 150 - [x] move to web implemented globalShortcut 151 - [x] move to web implemented openWindow 152 - [] move settings re-use code to utils lib 153 - [] ability to add clickable links in settings panes 154 - [] add links to Settings app 155 - [] per-feature settings ui 156 - [] feature metadata in manifest 149 + - [x] move all possible code from the electron file to the web app 150 + - [x] move to web implemented globalShortcut 151 + - [x] move to web implemented openWindow 152 + - [] move settings re-use code to utils lib 153 + - [] ability to add clickable links in settings panes 154 + - [] add links to Settings app 155 + - [] per-feature settings ui 156 + - [] feature metadata in manifest 157 157 158 158 Daily driver blockers 159 - [x] debug vs profile(s) for app dir 159 + - [x] debug vs profile(s) for app dir 160 160 161 161 Core+settings 162 - [x] move feature list and enablement to storage 163 - [x] merge core + settings 164 - [x] enable/disable features 165 - [x] configurable default feature to load on app open (default to settings) 166 - [x] wire up tray icon to pref 167 - [x] tray click opens default app 162 + - [x] move feature list and enablement to storage 163 + - [x] merge core + settings 164 + - [x] enable/disable features 165 + - [x] configurable default feature to load on app open (default to settings) 166 + - [x] wire up tray icon to pref 167 + - [x] tray click opens default app 168 168 169 169 Commands/messaging 170 - [x] implement pubsub api 171 - [x] way to tell feature to open default ui (if there is one) 172 - [] way to tell feature to open settings ui (if there is one) 173 - [] figure out re-init/reload story when pref/feature changes 174 - [] figure out feature unload/reload (unreg shortcuts, close windows, etc) 170 + - [x] implement pubsub api 171 + - [x] way to tell feature to open default ui (if there is one) 172 + - [] way to tell feature to open settings ui (if there is one) 173 + - [] figure out re-init/reload story when pref/feature changes 174 + - [] figure out feature unload/reload (unreg shortcuts, close windows, etc) 175 175 176 176 Misc 177 - [] fix ESC not working in web content 177 + - [] fix ESC not working in web content 178 178 179 179 History 180 - [] push navigations out through pubsub 181 - [] add history listener + storage to cmd 182 - [] store central app action history 183 - [] store content script data 180 + - [] push navigations out through pubsub 181 + - [] add history listener + storage to cmd 182 + - [] store central app action history 183 + - [] store content script data 184 184 185 - [] esc stack: from feature settings back to core settings 186 - [] add to izui stack (and ix w/ history?) 185 + - [] esc stack: from feature settings back to core settings 186 + - [] add to izui stack (and ix w/ history?) 187 187 188 188 Core/Basic 189 - [x] basic command bar to open pages 190 - [x] fix setting layout wrapping issue 191 - [] re-enable label previews, eg "Peek {key} - {address}" 192 - [] add support for per-feature hidden prefs (should be per-schema) 189 + - [x] basic command bar to open pages 190 + - [x] fix setting layout wrapping issue 191 + - [] re-enable label previews, eg "Peek {key} - {address}" 192 + - [] add support for per-feature hidden prefs (should be per-schema) 193 193 194 194 Features cleanup 195 - [] enable/disable individual slides, peeks 196 - [] enable/disable individual scripts 197 - [] visible-but-not-changeable settings should be per-schema 198 - [] add window open animation (to/from coords, time) to openWindow 199 - [] update slides impl to use animation again 200 - [] add window position persistence where it makes sense (settings, groups, cmd) and make configurable? 201 - [] add window size persistence where it makes sense (slides, peeks) and make configurable? 202 - [] global shortcuts vs app shortcuts 203 - [] openWindow option to not close on escape 195 + - [] enable/disable individual slides, peeks 196 + - [] enable/disable individual scripts 197 + - [] visible-but-not-changeable settings should be per-schema 198 + - [] add window open animation (to/from coords, time) to openWindow 199 + - [] update slides impl to use animation again 200 + - [] add window position persistence where it makes sense (settings, groups, cmd) and make configurable? 201 + - [] add window size persistence where it makes sense (slides, peeks) and make configurable? 202 + - [] global shortcuts vs app shortcuts 203 + - [] openWindow option to not close on escape 204 204 205 205 Core cleanup 206 - [] move feature bg pages to iframes in core bg page? 206 + - [] move feature bg pages to iframes in core bg page? 207 207 208 208 Deployment 209 - [] app updates 210 - [] icons 211 - [] about page 209 + - [] app updates 210 + - [] icons 211 + - [] about page 212 212 213 213 ➡️ MVP (minimum viable preview) 214 214 215 215 ------- 216 216 217 217 Install/load/address features 218 - [] manifests for feature metadata 219 - [] feature urls? eg peek://settings(/index.html) 220 - [] maybe fine to file urls for now, would have to migrate later 218 + - [] manifests for feature metadata 219 + - [] feature urls? eg peek://settings(/index.html) 220 + - [] maybe fine to file urls for now, would have to migrate later 221 221 222 222 Feature level rpc? 223 - [] how can other features query history vs store and query locally? 224 - [] how to know what urls there are to open? publish paths in manifests? 225 - [] discover + execute cmds? 226 - [] need to be able to get/set properties from other "features"? 223 + - [] how can other features query history vs store and query locally? 224 + - [] how to know what urls there are to open? publish paths in manifests? 225 + - [] discover + execute cmds? 226 + - [] need to be able to get/set properties from other "features"? 227 227 228 228 Window layout 229 - [] try with settings maybe? 230 - [] tile/untile 229 + - [] try with settings maybe? 230 + - [] tile/untile 231 231 232 232 Web Platform 233 - [] need a web loader that's not full BrowserWindow? 234 - [] sandboxing 235 - [] blocklist 233 + - [] need a web loader that's not full BrowserWindow? 234 + - [] sandboxing 235 + - [] blocklist 236 236 237 237 After that 238 - [] schema migration 239 - [] Extension model? 240 - [] Ubiquity-like 241 - [] Panorama-like 242 - [] Tray 243 - [] Scratchpad 244 - [] Identity 245 - [] Contacts 246 - [] Collaboration 238 + - [] schema migration 239 + - [] Extension model? 240 + - [] Ubiquity-like 241 + - [] Panorama-like 242 + - [] Tray 243 + - [] Scratchpad 244 + - [] Identity 245 + - [] Contacts 246 + - [] Collaboration 247 247 248 248 Further 249 - [] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you 250 - [] Extension model designed for web user agent user interface experimentation 251 - [] Infinite lossless personal encrypted archive of web history 249 + - [] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you 250 + - [] Extension model designed for web user agent user interface experimentation 251 + - [] Infinite lossless personal encrypted archive of web history 252 252 253 253 ## Contribution 254 254 255 - * in proto stage 256 - * all dragons, no promises 255 + - in proto stage 256 + - all dragons, no promises 257 257 258 258 ## Development 259 259 ··· 272 272 ## Resources 273 273 274 274 Agregore ext protocol impl 275 - * where all are registered: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/index.js#L74 276 - * how convert the fetch APIs to be compatible with the streaming protocol handler API in electron: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/fetch-to-handler.js 277 - * where register IPFS: https://github.com/AgregoreWeb/agregore-browser/blob/electron-23/app/protocols/ipfs-protocol.js 275 + - where all are registered: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/index.js#L74 276 + - how convert the fetch APIs to be compatible with the streaming protocol handler API in electron: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/fetch-to-handler.js 277 + - where register IPFS: https://github.com/AgregoreWeb/agregore-browser/blob/electron-23/app/protocols/ipfs-protocol.js 278 278 279 279 Browsers 280 - * Min browser architecture - https://github.com/minbrowser/min/wiki/Architecture 281 - * Dot browser https://www.dothq.org/en-US 280 + - Min browser architecture - https://github.com/minbrowser/min/wiki/Architecture 281 + - Dot browser https://www.dothq.org/en-US 282 282 283 283 Misc 284 - * https://github.com/Rajaniraiyn/awesome-electron-browsers 285 - * https://github.com/mawie81/electron-window-state 286 - * https://antonfisher.com/posts/2020/12/27/how-to-animate-native-electron-window/ 287 - * https://stackoverflow.com/questions/44818508/how-do-i-move-a-frameless-window-in-electron-without-using-webkit-app-region 284 + - https://github.com/Rajaniraiyn/awesome-electron-browsers 285 + - https://github.com/mawie81/electron-window-state 286 + - https://antonfisher.com/posts/2020/12/27/how-to-animate-native-electron-window/ 287 + - https://stackoverflow.com/questions/44818508/how-do-i-move-a-frameless-window-in-electron-without-using-webkit-app-region 288 288 289 289 ## History 290 290 291 291 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: 292 292 293 - * The Awesomebar: infinite history + personalized local search index 294 - * Ubiquity: Natural language commands + chaining 295 - * Jetpack: The Mozilla Labs version - web-platfrom-centric extensibility 296 - * Panorama: née TabCandy, web pages as groups instead of tabs in windows 293 + - The Awesomebar: infinite history + personalized local search index 294 + - Ubiquity: Natural language commands + chaining 295 + - Jetpack: The Mozilla Labs version - web-platfrom-centric extensibility 296 + - Panorama: née TabCandy, web pages as groups instead of tabs in windows 297 297 298 298 A few others which were in the right direction but didn't achieve their optimal form: 299 299 300 - * Greasemonkey 301 - * Microsummaries 302 - * Contacts extension 300 + - Greasemonkey 301 + - Microsummaries 302 + - Contacts extension 303 303 304 304 The first version of the Peek application has some bits of each of these, and the original Peek browser extension. 305 305 ··· 315 315 316 316 ## Testcase: Authoring Flows 317 317 318 - * author web content 319 - * pull in bits from the web 320 - * share preview for feedback 321 - * publish (or at least get output) 318 + - author web content 319 + - pull in bits from the web 320 + - share preview for feedback 321 + - publish (or at least get output) 322 322 323 323 writing the recap of the web track at ipfs thing 2023 324 324