···4455** WARNING: THIS IS VACATIONWARE **
6677-* 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.
88-* 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.
77+- 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.
88+- 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.
991010<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">
1111···13131414Many 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.
15151616-* transient
1717-* chained
1818-* persistent
1919-* data oriented
1616+- transient
1717+- chained
1818+- persistent
1919+- data oriented
20202121About this space:
2222-* Embrace the app-ness aspect of the web platform, less about the document-ness
2323-* Javascript is ok here
2424-* Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point
2222+- Embrace the app-ness aspect of the web platform, less about the document-ness
2323+- Javascript is ok here
2424+- Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point
25252626## Features
27272828You can use Peek in a few ways, with more coming:
29293030-* Peeks - Keyboard activated modal chromeless web pages
3131-* Slides - Keyboard or gesture activated modal chromeless web pages which slide in from any screen edges
3232-* Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes
3030+- Peeks - Keyboard activated modal chromeless web pages
3131+- Slides - Keyboard or gesture activated modal chromeless web pages which slide in from any screen edges
3232+- Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes
33333434In progress:
3535-* Commands
3636-* Groups
3535+- Commands
3636+- Groups
37373838Thinking about:
3939- "native" web apps
···56565757Some thoughts driving the design of Peek:
58585959-* Web user agents should be bounded by the user, not browser vendor business models
6060-* 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
6161-* Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions
5959+- Web user agents should be bounded by the user, not browser vendor business models
6060+- 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
6161+- Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions
62626363## User values
6464···67676868## Design patterns
69697070-* Escape IZUI
7070+- Escape IZUI
7171 * IZUI: inverse zooming user interface
7272 * ZUIs navigate by starting from a known root and user navigates by zooming ever further in
7373 * Escape starts anywhere, and instead of navigating by zooming in, all interfaces can zoom out to reset
···8484Peek is designed to be modular and configurable around the idea that parts of it can run in different environments.
85858686For example:
8787-* Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts
8888-* I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data
8989-* Want cloud storage for all config and data, esp infinite history, so can do fun things with it
8787+- Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts
8888+- I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data
8989+- Want cloud storage for all config and data, esp infinite history, so can do fun things with it
90909191### Desktop App
9292···9595The user interface is just Tweakpane panels and modal chromeless web pages rn.
96969797TODO
9898-* Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support.
9999-* 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.
9898+- Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support.
9999+- 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.
100100101101### Usage
102102103103-* Settings
103103+- Settings
104104 * In app, `cmd/ctl+r,` or launch app to open settings, or click tray
105105 * Configure Peeks/Slides/Scripts in settings
106106-* Peeks
106106+- Peeks
107107 * `Opt+0-9` to open Peeks
108108-* Slides
108108+- Slides
109109 * `Opt+←→↑↓` to open Slides
110110111111### Mobile
112112113113-* Quick access to Script output and manual runs, as widgets (or output from cloud runners?)
114114-* Peeks still totes useful here - on mobile is more like "quick dial" features
113113+- Quick access to Script output and manual runs, as widgets (or output from cloud runners?)
114114+- Peeks still totes useful here - on mobile is more like "quick dial" features
115115116116### Cloud
117117118118-* Going full crypto payments for distributed compute on this one.
118118+- Going full crypto payments for distributed compute on this one.
119119120120## Daily Papercut Log
121121···124124## Roadmap
125125126126Core moduluarization
127127-[x] Modularize feature types, eyeing the extensibility model
128128-[x] move settings window to features/settings
127127+- [x] Modularize feature types, eyeing the extensibility model
128128+- [x] move settings window to features/settings
129129130130App cleanup
131131-[x] main window vs settings
132132-[x] change settings shortcut from global+esc to opt+comma
131131+- [x] main window vs settings
132132+- [x] change settings shortcut from global+esc to opt+comma
133133134134Window lifecycle
135135-[x] modularize window open/close + hidden/visible
136136-[x] update settings, peeks, slides, scripts
137137-[x] hide/show window vs create fresh
138138-[x] update slides impl to use openWindow (x, y)
135135+- [x] modularize window open/close + hidden/visible
136136+- [x] update settings, peeks, slides, scripts
137137+- [x] hide/show window vs create fresh
138138+- [x] update slides impl to use openWindow (x, y)
139139140140Minimal Electron + Maximal Web
141141-[x] move features to all web code, with a couple special apis
142142-[x] make globalShortcut an api like openWindow
141141+- [x] move features to all web code, with a couple special apis
142142+- [x] make globalShortcut an api like openWindow
143143144144Create core app
145145-[x] core settings
146146-[x] registers other features
145145+- [x] core settings
146146+- [x] registers other features
147147148148Move all features to web implementation
149149-[x] move all possible code from the electron file to the web app
150150-[x] move to web implemented globalShortcut
151151-[x] move to web implemented openWindow
152152-[] move settings re-use code to utils lib
153153-[] ability to add clickable links in settings panes
154154-[] add links to Settings app
155155-[] per-feature settings ui
156156-[] feature metadata in manifest
149149+- [x] move all possible code from the electron file to the web app
150150+- [x] move to web implemented globalShortcut
151151+- [x] move to web implemented openWindow
152152+- [] move settings re-use code to utils lib
153153+- [] ability to add clickable links in settings panes
154154+- [] add links to Settings app
155155+- [] per-feature settings ui
156156+- [] feature metadata in manifest
157157158158Daily driver blockers
159159-[x] debug vs profile(s) for app dir
159159+- [x] debug vs profile(s) for app dir
160160161161Core+settings
162162-[x] move feature list and enablement to storage
163163-[x] merge core + settings
164164-[x] enable/disable features
165165-[x] configurable default feature to load on app open (default to settings)
166166-[x] wire up tray icon to pref
167167-[x] tray click opens default app
162162+- [x] move feature list and enablement to storage
163163+- [x] merge core + settings
164164+- [x] enable/disable features
165165+- [x] configurable default feature to load on app open (default to settings)
166166+- [x] wire up tray icon to pref
167167+- [x] tray click opens default app
168168169169Commands/messaging
170170-[x] implement pubsub api
171171-[x] way to tell feature to open default ui (if there is one)
172172-[] way to tell feature to open settings ui (if there is one)
173173-[] figure out re-init/reload story when pref/feature changes
174174-[] figure out feature unload/reload (unreg shortcuts, close windows, etc)
170170+- [x] implement pubsub api
171171+- [x] way to tell feature to open default ui (if there is one)
172172+- [] way to tell feature to open settings ui (if there is one)
173173+- [] figure out re-init/reload story when pref/feature changes
174174+- [] figure out feature unload/reload (unreg shortcuts, close windows, etc)
175175176176Misc
177177-[] fix ESC not working in web content
177177+- [] fix ESC not working in web content
178178179179History
180180-[] push navigations out through pubsub
181181-[] add history listener + storage to cmd
182182-[] store central app action history
183183-[] store content script data
180180+- [] push navigations out through pubsub
181181+- [] add history listener + storage to cmd
182182+- [] store central app action history
183183+- [] store content script data
184184185185-[] esc stack: from feature settings back to core settings
186186-[] add to izui stack (and ix w/ history?)
185185+- [] esc stack: from feature settings back to core settings
186186+- [] add to izui stack (and ix w/ history?)
187187188188Core/Basic
189189-[x] basic command bar to open pages
190190-[x] fix setting layout wrapping issue
191191-[] re-enable label previews, eg "Peek {key} - {address}"
192192-[] add support for per-feature hidden prefs (should be per-schema)
189189+- [x] basic command bar to open pages
190190+- [x] fix setting layout wrapping issue
191191+- [] re-enable label previews, eg "Peek {key} - {address}"
192192+- [] add support for per-feature hidden prefs (should be per-schema)
193193194194Features cleanup
195195-[] enable/disable individual slides, peeks
196196-[] enable/disable individual scripts
197197-[] visible-but-not-changeable settings should be per-schema
198198-[] add window open animation (to/from coords, time) to openWindow
199199-[] update slides impl to use animation again
200200-[] add window position persistence where it makes sense (settings, groups, cmd) and make configurable?
201201-[] add window size persistence where it makes sense (slides, peeks) and make configurable?
202202-[] global shortcuts vs app shortcuts
203203-[] openWindow option to not close on escape
195195+- [] enable/disable individual slides, peeks
196196+- [] enable/disable individual scripts
197197+- [] visible-but-not-changeable settings should be per-schema
198198+- [] add window open animation (to/from coords, time) to openWindow
199199+- [] update slides impl to use animation again
200200+- [] add window position persistence where it makes sense (settings, groups, cmd) and make configurable?
201201+- [] add window size persistence where it makes sense (slides, peeks) and make configurable?
202202+- [] global shortcuts vs app shortcuts
203203+- [] openWindow option to not close on escape
204204205205Core cleanup
206206-[] move feature bg pages to iframes in core bg page?
206206+- [] move feature bg pages to iframes in core bg page?
207207208208Deployment
209209-[] app updates
210210-[] icons
211211-[] about page
209209+- [] app updates
210210+- [] icons
211211+- [] about page
212212213213➡️ MVP (minimum viable preview)
214214215215-------
216216217217Install/load/address features
218218-[] manifests for feature metadata
219219-[] feature urls? eg peek://settings(/index.html)
220220-[] maybe fine to file urls for now, would have to migrate later
218218+- [] manifests for feature metadata
219219+- [] feature urls? eg peek://settings(/index.html)
220220+- [] maybe fine to file urls for now, would have to migrate later
221221222222Feature level rpc?
223223-[] how can other features query history vs store and query locally?
224224-[] how to know what urls there are to open? publish paths in manifests?
225225-[] discover + execute cmds?
226226-[] need to be able to get/set properties from other "features"?
223223+- [] how can other features query history vs store and query locally?
224224+- [] how to know what urls there are to open? publish paths in manifests?
225225+- [] discover + execute cmds?
226226+- [] need to be able to get/set properties from other "features"?
227227228228Window layout
229229-[] try with settings maybe?
230230-[] tile/untile
229229+- [] try with settings maybe?
230230+- [] tile/untile
231231232232Web Platform
233233-[] need a web loader that's not full BrowserWindow?
234234-[] sandboxing
235235-[] blocklist
233233+- [] need a web loader that's not full BrowserWindow?
234234+- [] sandboxing
235235+- [] blocklist
236236237237After that
238238-[] schema migration
239239-[] Extension model?
240240-[] Ubiquity-like
241241-[] Panorama-like
242242-[] Tray
243243-[] Scratchpad
244244-[] Identity
245245-[] Contacts
246246-[] Collaboration
238238+- [] schema migration
239239+- [] Extension model?
240240+- [] Ubiquity-like
241241+- [] Panorama-like
242242+- [] Tray
243243+- [] Scratchpad
244244+- [] Identity
245245+- [] Contacts
246246+- [] Collaboration
247247248248Further
249249-[] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you
250250-[] Extension model designed for web user agent user interface experimentation
251251-[] Infinite lossless personal encrypted archive of web history
249249+- [] Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you
250250+- [] Extension model designed for web user agent user interface experimentation
251251+- [] Infinite lossless personal encrypted archive of web history
252252253253## Contribution
254254255255-* in proto stage
256256-* all dragons, no promises
255255+- in proto stage
256256+- all dragons, no promises
257257258258## Development
259259···272272## Resources
273273274274Agregore ext protocol impl
275275-* where all are registered: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/index.js#L74
276276-* 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
277277-* where register IPFS: https://github.com/AgregoreWeb/agregore-browser/blob/electron-23/app/protocols/ipfs-protocol.js
275275+- where all are registered: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/index.js#L74
276276+- 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
277277+- where register IPFS: https://github.com/AgregoreWeb/agregore-browser/blob/electron-23/app/protocols/ipfs-protocol.js
278278279279Browsers
280280-* Min browser architecture - https://github.com/minbrowser/min/wiki/Architecture
281281-* Dot browser https://www.dothq.org/en-US
280280+- Min browser architecture - https://github.com/minbrowser/min/wiki/Architecture
281281+- Dot browser https://www.dothq.org/en-US
282282283283Misc
284284-* https://github.com/Rajaniraiyn/awesome-electron-browsers
285285-* https://github.com/mawie81/electron-window-state
286286-* https://antonfisher.com/posts/2020/12/27/how-to-animate-native-electron-window/
287287-* https://stackoverflow.com/questions/44818508/how-do-i-move-a-frameless-window-in-electron-without-using-webkit-app-region
284284+- https://github.com/Rajaniraiyn/awesome-electron-browsers
285285+- https://github.com/mawie81/electron-window-state
286286+- https://antonfisher.com/posts/2020/12/27/how-to-animate-native-electron-window/
287287+- https://stackoverflow.com/questions/44818508/how-do-i-move-a-frameless-window-in-electron-without-using-webkit-app-region
288288289289## History
290290291291In 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:
292292293293-* The Awesomebar: infinite history + personalized local search index
294294-* Ubiquity: Natural language commands + chaining
295295-* Jetpack: The Mozilla Labs version - web-platfrom-centric extensibility
296296-* Panorama: née TabCandy, web pages as groups instead of tabs in windows
293293+- The Awesomebar: infinite history + personalized local search index
294294+- Ubiquity: Natural language commands + chaining
295295+- Jetpack: The Mozilla Labs version - web-platfrom-centric extensibility
296296+- Panorama: née TabCandy, web pages as groups instead of tabs in windows
297297298298A few others which were in the right direction but didn't achieve their optimal form:
299299300300-* Greasemonkey
301301-* Microsummaries
302302-* Contacts extension
300300+- Greasemonkey
301301+- Microsummaries
302302+- Contacts extension
303303304304The first version of the Peek application has some bits of each of these, and the original Peek browser extension.
305305···315315316316## Testcase: Authoring Flows
317317318318-* author web content
319319-* pull in bits from the web
320320-* share preview for feedback
321321-* publish (or at least get output)
318318+- author web content
319319+- pull in bits from the web
320320+- share preview for feedback
321321+- publish (or at least get output)
322322323323writing the recap of the web track at ipfs thing 2023
324324