···11# Peek TODO
2233## How we work
44+45- We track pending items in this file
56- In-progress work and current focus goes in WIP.md
67- Completed items go in CHANGELOG.md, grouped by week
···201202## Metadata, QS and reflection
202203203204- [ ] tabstats for peek
204204-- [ ] a page of widgets
205205+- [ ] view: a page of different widgets showing this info, or a hud/dashboard
205206206207## Files-ness
207208···250251251252## Notes & Editor
252253253253-Editor
254254-- [ ] include by default from ~/misc/peek-editor
255255-- [ ] support for paste operations
256256-- [ ] settings option for url to external editor (expects peek connector support), defaults to built-in address
254254+Description and core requirements
255255+- editor that can be used standalone or embedded
256256+- markdown by default
257257+- vim mode as global configuration option
258258+- custom folding approach
259259+- supports peek connectors (mime in -> edit -> mime out)
260260+261261+Used for
262262+- editing notes
263263+- editing in command chaining interstitials (edit cmd can apply to anything text-ish)
264264+- OS level handler for editing files on filesystem
265265+266266+Implementation
267267+- [ ] import from ~/misc/peek-editor, put in ./extensions/editor for now
268268+- [ ] evaluate using raw codemirror which is like “toolkit for an editor"
269269+- [ ] evaluate using https://github.com/MarkEdit-app/MarkEdit or its approach
270270+271271+Features
272272+- [ ] add support for paste operations
273273+- [ ] settings option for url to external editor (expects peek connector support), defaults to built-in editor
257274- [ ] tags in content detected, added/removed from tag system
258275259276Notes app
···277294## Groups & Tags UX
278295279296- [ ] Define relationship between page groups and tags (are they the same? different views?)
297297+- [ ] new page while in group mode adds to that group
280298281299Groups
282300- [ ] Visually communicate group-active (a "mode"? see Mode/scope section)
···425443- [ ] OpenSearch
426444427445Web extensions
428428-- [ ] WebExtension integration for priority only, on some platforms
429429-- [ ] ubo
430430-- [ ] proton pass
431431-- [ ] bpc
446446+- [ ] WebExtension integration for priority only, on some platforms, some back-ends
447447+- [ ] Electron first, using https://github.com/samuelmaddock/electron-browser-shell/tree/master/packages/electron-chrome-extensions
448448+- [ ] uBlock Origin
449449+- [ ] Proton Pass
450450+- [ ] Bypass Paywalls Clean
432451433452## Feeds, time-series, scripts
434453
+563
peek-todo.md
···11+# Peek TODO
22+33+## How we work
44+55+- We track pending items in this file
66+- In-progress work and current focus goes in WIP.md
77+- Completed items go in CHANGELOG.md, grouped by week
88+- This file is not for notes or description - link to documents in ./notes for that
99+- Checkbox states: `- [ ]` pending, `- [~]` in-progress (move to WIP.md), `- [x]` done (move to CHANGELOG.md)
1010+1111+## Design principles
1212+1313+core
1414+- feels like home: trust, comfort, control
1515+- continuous instances of magical mind-reading
1616+- sleep at night because no idea or anything you saw is ever lost
1717+- create, save, classify at the speed of thought
1818+1919+what makes a home
2020+- everything is right where you need it, b/c you control what is where
2121+- when you know what is where, you can make things without frustration
2222+2323+synthesis
2424+- frecency + adaptive matching gives experience/feeling of magical mind-readingness
2525+- ability to customize/create/generate interfaces gives the comfort of home
2626+2727+cf
2828+- bulthaup - german kitchen company w/ designs based on carpentry workshops
2929+3030+the rules
3131+- files > arcane/opaque boxes/formats
3232+- metadata can be weird non-file, as long as consistent
3333+- external systems require consent to touch my stuff (eg http caching rules)
3434+3535+## Unfiled
3636+3737+context
3838+- [ ] implement old context plan eg https://www.reddit.com/r/hackernews/comments/1qddidm/sun_position_calculator/
3939+4040+server
4141+- [ ] edgeworkernode/server vs what we got now? both? lite-version, or this it?
4242+4343+peeks on links
4444+- [ ] click modifier to one-off peek a link
4545+- [ ] anchored to cursor w/in window bounds
4646+- [ ] as an extension? hotkey + page viewer
4747+4848+once we have cardinal ui
4949+- [ ] option to flash keyboard shortcuts on screen
5050+- [ ] pop up a board of built-in shortcuts/actions
5151+- [ ] pop up a board of common shortcuts/actions you use
5252+5353+## Addessibility / Core history / feeds
5454+5555+For record/replay, daily ribbon, state feedback loops and observability, etc we need a complete chained history.
5656+All of those require addressibility of all primary actions, and connections to prev/next actions.
5757+Includes any peek:// invocation and parameters passed.
5858+May require the connector/parameter context for each invocation, tbd.
5959+Requires explicit chaining.
6060+6161+Review against impl
6262+- [ ] step counter: app level interaction tracing/counting. when is reset? when does action end and new one start?
6363+- [ ] peeks/slides as tagged addresses with metadata properties? or urls?
6464+6565+## UI Componentry
6666+6767+Right now we're replicating/forking html and js across extensions.
6868+6969+problems
7070+- messy, error prone, poor DRY practice
7171+- also means we can't generatively and rapidly build out UIs without whole new piles of html/js/css to manage
7272+7373+What it is
7474+- flexible / reusable system at the ./app layer
7575+- extensions use for creating/generating interfaces
7676+- can override/overlay/inject styling
7777+- easy to make system-consistent ux and themed visual design
7878+- loosely coupled system with deterministic management
7979+- like a set of prebuilt controls
8080+- designed for single-component, or sets
8181+- binds to data source, is reactive to it (events, event-sources, streams, our feed system)
8282+8383+what it isn't
8484+- designed for complex document hierarchies
8585+- js components React-style
8686+8787+usage
8888+- callers instanciate a control
8989+- provide schema/data into a control which has a default template
9090+- template can be replaced by caller
9191+9292+examples/use-cases
9393+- groups, tag ui and windows viewer are all card grids
9494+- chaining is command components + card popups with lists, editors, previews, etc
9595+- after atproto support, this could be used to bind lexicons + data for generated viewing/CRUD interfaces.
9696+- see the Window templates section of this file
9797+- see the Pagestream section of this file
9898+- see the Chaining section of this file
9999+- see the Notes/Editor section of this file
100100+- see the Web page experience section of this file
101101+- see the Unfiled section of this file
102102+- see the Commands section of this file
103103+104104+implementation
105105+- use https://open-ui.org/ as much as possible, should cover a lot, eg, buttons, card/grid, cmd, carousels
106106+- see ~/sync/Sites/base for experiments w/ hud etc
107107+108108+reactive schema+card+data system
109109+- [ ] cards + json schema + data
110110+- [ ] no hierarchy, just single component to start, renders to markup
111111+- [ ] instantiatable with data
112112+- [ ] receive updates to refresh
113113+114114+integration
115115+- [ ] determine how extensions will import from core
116116+- [ ] determine how consumers will apply styles
117117+- [ ] explore node reuse/recycle approaches
118118+119119+ui
120120+- [ ] button
121121+- [ ] button set (eg for tag boards/sets)
122122+- [ ] card
123123+- [ ] list
124124+- [ ] grid
125125+- [ ] vertical carousel of cards (like a chat view w/ interactable focus card)
126126+- [ ] horizontal carousel of cards (eg for command chaining, day ribbons)
127127+- [ ] image viewer
128128+- [ ] command input
129129+- [ ] command suggestion
130130+- [ ] command preview pane
131131+- [ ] search/filters on enumerable items (list, grid)
132132+- [ ] editor
133133+- [ ] column/columns
134134+135135+initial porting
136136+- [ ] groups -> card/cards
137137+- [ ] tags -> card/cards
138138+- [ ] tag sets -> button set
139139+- [ ] cmd -> command input/suggestions
140140+- [ ] cmd chaining -> horizontal carousel, list
141141+142142+popup carousel system
143143+- [ ] horizontal and vertical carousel components
144144+- [ ] see ~/sync/Sites/base/hud.html/css/js for basic ui system
145145+- [ ] active item focused in popup
146146+- [ ] arrow controls and vim directionals
147147+- [ ] port cmd chaining to horizontal carousel popups
148148+- [ ] port cmd previews to vertical carousel popups
149149+150150+button sets
151151+- [ ] set of buttons
152152+- [ ] up/depressed states
153153+- [ ] x endcap option
154154+155155+tags
156156+- [ ] all built on buttons and button sets
157157+- [ ] tag input field
158158+- [ ] combo of selected tags, input w/ filtering search, available tags
159159+160160+## Modes/scopes
161161+162162+notes
163163+- Pages have a specific mode, with specific hotkeys, etc.
164164+- Commands like "theme dark here" operate on the "target window".
165165+- Target window is usually what the user was looking at before opening cmd.
166166+- Currently this works but there's no visual indication.
167167+168168+examples
169169+- web page viewing has a mode w/ special actions and hotkeys
170170+- when "in" a group, we need special mode optimized for working w/ the group's set of pages
171171+- cmd might operate differently depending on if it's in a mode or not
172172+173173+- [ ] How to do page "mode" (for example) with conditional context/hotkeys/actions
174174+- [ ] Should commands declare `scope: 'window' | 'page' | 'global'` in registration?
175175+- [ ] How does cmd indicate scope/target?
176176+ - [ ] eg "Target: [window title]" header when window-scoped command is selected?
177177+178178+## Web page experience (reviewme: partially done)
179179+180180+Page loading core
181181+- [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay??
182182+- [ ] overlay infrastructure for showing metadata, security info
183183+- [ ] interaction with cmd actions (page mode again?)
184184+185185+Basic nav etc
186186+- [ ] hotkey to select url
187187+- [ ] back/forward
188188+- [ ] reload
189189+- [ ] undo last close
190190+- [ ] if url selected in cmd is open in a window already, switch to it (for now)
191191+192192+Page info/metadata/action widgets (depends on window templates maybe?)
193193+- [ ] defaults, eg sec ui
194194+- [ ] metadata (og, whatnot)
195195+- [ ] media (imgs, rss, etc)
196196+- [ ] actions (new extension cmd type?)
197197+- [ ] scripts (tbd)
198198+199199+Titlebar
200200+- [ ] show titlebar on hover at top edge of window for all pages
201201+202202+## Metadata, QS and reflection
203203+204204+- [ ] tabstats for peek
205205+- [ ] view: a page of different widgets showing this info, or a hud/dashboard
206206+207207+## Files-ness
208208+209209+- [ ] access to notes folder(s) on filesystem to import+sync
210210+- [ ] syncing peek-only ontes as markdown files in specified dir (or library, boo)
211211+- [ ] import signal note-to-self archive into peek notes
212212+213213+## Accounts/profiles/sync safety/fidelity
214214+215215+api key (accounts)
216216+- [ ] how initiated (manually my operator only for now, just document it)
217217+218218+syncing history
219219+- [ ] how to sync/merge frencency and adaptive matching?
220220+221221+## Extension dev
222222+223223+- [ ] shared libs, eg utils
224224+- [ ] language: call them feature or apps? other? extensions? mods?
225225+226226+## Izui
227227+228228+- [ ] formalize model
229229+- [ ] make izui stack manager (part of window mgr?)
230230+- [ ] esc stack: from feature settings back to core settings
231231+- [ ] add to izui stack (and ix w/ history?)
232232+- [ ] interactions/sec-policy between peek:// and other
233233+234234+## Polish
235235+236236+- [ ] (already done?) if no api key set, sync settings are disabled, and pull-to-sync on mobile
237237+238238+## Window templates
239239+240240+- [ ] declarative sets of ui components?
241241+- [ ] eg page info hud overlay (~/sync/Sites/base/)
242242+- [ ] explode: windows using groups ui with transparent background and vi directionals, enter opens
243243+- [ ] tile/untile, eg the Explode extension
244244+245245+## Pagestream
246246+247247+- a new peek web navigational system
248248+- vertical up/down chat-style history of pages/actions
249249+- left/right for page-specific stuff
250250+- maybe uses carousels + window template from ui componentry?
251251+252252+## Notes & Editor
253253+254254+Description and core requirements
255255+- editor that can be used standalone or embedded
256256+- markdown by default
257257+- vim mode as global configuration option
258258+- custom folding approach
259259+- supports peek connectors (mime in -> edit -> mime out)
260260+261261+Used for
262262+- editing notes
263263+- editing in command chaining interstitials (edit cmd can apply to anything text-ish)
264264+- OS level handler for editing files on filesystem
265265+266266+Implementation
267267+- [ ] import from ~/misc/peek-editor, put in ./extensions/editor for now
268268+- [ ] evaluate using raw codemirror which is like “toolkit for an editor"
269269+- [ ] evaluate using https://github.com/MarkEdit-app/MarkEdit or its approach
270270+271271+Features
272272+- [ ] add support for paste operations
273273+- [ ] settings option for url to external editor (expects peek connector support), defaults to built-in editor
274274+- [ ] tags in content detected, added/removed from tag system
275275+276276+Notes app
277277+- [ ] see all notes
278278+- [ ] filtering search on notes
279279+- [ ] click to edit
280280+- [ ] how to address a specific note in the editor?
281281+- [ ] maybe we need path or name-based ways of addressing "docs" in datastore?
282282+283283+Integrations
284284+- [ ] local dir sync
285285+- [ ] import macos stickies
286286+287287+Stickies
288288+- [ ] cards layout primitive (requires UI componentry?)
289289+- [ ] "pin" notes to stickies using a tag
290290+291291+Requires chaining and connectors
292292+- [ ] List editor
293293+294294+## Groups & Tags UX
295295+296296+- [ ] Define relationship between page groups and tags (are they the same? different views?)
297297+- [ ] new page while in group mode adds to that group
298298+299299+Groups
300300+- [ ] Visually communicate group-active (a "mode"? see Mode/scope section)
301301+- [ ] Determine which new-page routes qualify for staying in group vs not
302302+- [ ] When group-active, qualifying new pages are automatically tagged as in the group
303303+- [ ] Determine how/when to exit group for new pages opened (eg from external app)
304304+305305+mobile
306306+- [ ] filtering search of tags in tag input box
307307+- [ ] view tag groups
308308+309309+cmd
310310+- [ ] port tagging ui from mobile, eg:
311311+ - [ ] see and be able to remove already added tags
312312+ - [ ] input box for typing new tags and filtering unselected tag list
313313+ - [ ] unselected tag list, each as clickable button
314314+315315+tagsets
316316+- [ ]
317317+318318+general
319319+- [ ] space vs group (language)
320320+321321+desktop
322322+- [ ] figure out group mode (maybe needs cmd+l)
323323+- [ ] groups header overhaul
324324+325325+## Commands
326326+327327+- [ ] detect URL input without http(s):// prefix, auto-add https:// and open
328328+- [ ] command tags {str} to load tag in group view
329329+- [ ] peek addresses as cmds by title (http too?)
330330+- [ ] cmd/peek history (they don't show up in cmd!)
331331+- [ ] map cmd using OSM
332332+- [ ] open kagi via cmd
333333+- [ ] search history via cmd
334334+- [ ] all commands as a button board
335335+336336+- [ ] app+browser history swiss army knife for querying and generating url lists via chaining, saving for offline (->txt) etc, maybe using connectors
337337+338338+339339+## Chaining / Connecting
340340+341341+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.
342342+343343+Example flow:
344344+- open a web page
345345+- cmd: show lists -> shows list of lists detected in the page
346346+- arrow up/down and choose one -> shows preview of the selected list
347347+- cmd: csv -> shows preview of csv
348348+- cmd: save file -> prompts to download
349349+350350+- [ ] Connector API: Chaining reqs inputs/outputs (eg activities/intents/applets)
351351+ - [ ] Determine if this should be a new API or reuses command registration
352352+ - [ ] Extension API to register as a connector handler for a set of mime/types
353353+ - [ ] Extension API to emit data to handlers for the specified mime type output (or maybe we allow multiple like the web clipboard API does)
354354+- [ ] Cmd support for chaining flow using "connectors"
355355+ - [ ] Add Connector Handler support, so data can move one-way from a command to another
356356+ - [ ] Filter first on mime type matches
357357+ - [ ] Policy for determing best matching command order (using frecency + adaptive matching)
358358+- [ ] Support previewing of the data in between steps
359359+ - [ ] Modular system for plugging renderers in for generating previews/editors of mime types
360360+ - [ ] Doesn't need to be an extension API yet, but we'll need a way for that later maybe
361361+ - [ ] Preview panel is visually connected to the cmd panel, which should stay visible or visually connected somehow
362362+- [ ] Cmd UI updates
363363+ - [ ] Cmd panel can show dropdown listing matching commands
364364+ - [ ] User can navigate list w/ arrow up/down, j/k and tab/shift-tab
365365+ - [ ] If cmd response has a previewAddress property, show a preview pane w/ that address
366366+367367+examples
368368+- [ ] 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?)
369369+- [ ] links on page -> list -> button cloud -> kb activate (then shorten to "link cloud" cmd)
370370+- [ ] compound cmds (like "link cloud". uses chaining? like a chain package?)
371371+372372+## Media: images/videos, favicon/screenshot cache
373373+374374+Media storage architecture
375375+- [ ] review use-cases for images/videos/favicons/screenshot
376376+- [ ] files or other, hybrid?
377377+- [ ] addressing scheme
378378+- [ ] platform-specific integrations (eg mobile)
379379+380380+Image saving
381381+- [ ] media storage for images
382382+- [ ][mobile] complete image sharing/tag-editing/viewing support
383383+384384+- [ ] store screenshots and favicons for any page loaded through window system
385385+- [ ] save on disk in profile
386386+- [ ] investigate how media caches store/address for url-based high performance lookup
387387+- [ ] store location of files as url metadata
388388+- [ ] integrate lookups in groups, url cards, page info, etc
389389+390390+- [ ] per-profile favicon cache dir
391391+- [ ] take and save favicon of any address loaded through window system
392392+- [ ] store in profile favicon cache, and save location as metadata record on the address
393393+394394+- [ ] per-profile screenshot cache dir
395395+- [ ] take and save screenshot of loaded windows for any new address
396396+- [ ] store in profile screenshot cache, and save that as metadata record on the address
397397+398398+## Extension back-end
399399+400400+- [ ] tbd
401401+402402+## Server Backend
403403+404404+agent mode
405405+- [ ] agent mode: explore running application logic in a headless node
406406+407407+diagnostics
408408+- [ ] diagnostic/status API: resource usage, overall disk usage, per-user disk stats, request volume and data types
409409+- [ ] make widget on desktop
410410+411411+misc
412412+- [ ] Add migration dry-run mode
413413+- [ ] Add automatic backup cleanup after grace period
414414+415415+## harvester / hearts and stars
416416+417417+- [ ] push all services to peek node webhook, eg bsky like, reddit, oauthwonderwall?
418418+419419+## Mobile
420420+421421+- [ ] in url saves/views, show oembed, or at least page title
422422+- [ ] for url saves, save title and any other metadata
423423+- [ ] investigate detecting which app a share came from
424424+425425+## Session & State Management
426426+427427+- [ ] export/import
428428+- [ ] session restore
429429+430430+## Browser status quo extensibility
431431+432432+Status quo
433433+- [ ] Browser extensions (limited, to get a couple of popular ones working)
434434+- [ ] Opensearch plugins
435435+- [ ] Quicksearch
436436+- [ ] Bookmark keywords (equivalent)
437437+- [ ] Bookmarklets (equivalent)
438438+- [ ] Userscripts (cf general approach to content/user scripts)
439439+- [ ] Language packs (cf general approach to i18n/l10n)
440440+441441+Search
442442+- [ ] Local
443443+- [ ] OpenSearch
444444+445445+Web extensions
446446+- [ ] WebExtension integration for priority only, on some platforms, some back-ends
447447+- [ ] Electron first, using https://github.com/samuelmaddock/electron-browser-shell/tree/master/packages/electron-chrome-extensions
448448+- [ ] uBlock Origin
449449+- [ ] Proton Pass
450450+- [ ] Bypass Paywalls Clean
451451+452452+## Feeds, time-series, scripts
453453+454454+- [ ] API for logging outputs to datastore (time series data, feeds)
455455+- [ ] Command support for blocking on a content script running
456456+- [ ] Extension api for executing arbitrary scripts against a page
457457+- [ ] Timeouts for page scripts in commands
458458+- [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho)
459459+- [ ] Page load triggers for background scripts
460460+461461+- [ ] tag streaks -> atproto streaks (feeds + daytum)
462462+- [ ] 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?)
463463+464464+## Entity centrism (NER streams)
465465+466466+- [ ] get people, places, dates/times/events
467467+- [ ] get meaningful numbers, and their label
468468+- [ ] extract a table as csv
469469+- [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page)
470470+471471+472472+- [ ] Entity catalog definition (eg Wikidata defs, or custom to start?)
473473+- [ ] Datastore support
474474+- [ ] Basic NER testing (regex, etc)
475475+- [ ] Page metadata viz
476476+- [ ] Entity search/browse
477477+- [ ] ML NER
478478+479479+## Archiving / expiration
480480+481481+- [ ] archived notes (lower score, hidden by default)
482482+483483+## Sorting/scoring/magic
484484+485485+Generally default is based on the old Firefox "awesomebar" scoring/search algorithms.
486486+Frecency + adaptive matching.
487487+The app *learns* you, and what you want magically appears w/o AI as requirement.
488488+489489+## Desktop Performance
490490+491491+- [ ] Reduce startup time (currently ~550ms build)
492492+- [ ] Pre-compiled TypeScript: skip tsc during dev if no changes
493493+- [ ] Lazy extension loading: load on first access instead of startup
494494+- [ ] Suspend inactive tabs (reduce memory for background pages)
495495+- [ ] Performant BrowserWindow unloading (fully release resources when not needed)
496496+497497+## Identity and privacy
498498+499499+keys
500500+- [ ] server-less identity system
501501+- [ ] key backup/restore/rotation
502502+503503+encrypted storage
504504+- [ ] account unlocks its profiles
505505+- [ ] profile switching/opening screen
506506+507507+point-of-use privacy
508508+- [ ] private items, eg gift ideas, cf archived - visible with magic tag (which itself doesn't show in history)
509509+- [ ] private links - click not tracked, opens page in private mode
510510+- [ ] private profiles
511511+512512+## Demos / Tutorials / Comms
513513+514514+Demo reel
515515+- [ ] Define demo reel
516516+- [ ] Peeks: translate, calendar, ai chat, currency conversion, everytimezone, tldraw
517517+- [ ] Slides: soundcloud, crypto prices, notepad, todo list
518518+- [ ] Scripts: stock price, weather change
519519+520520+## History
521521+522522+- [ ] history views (again using groups ui, maybe plug that into an extension itself?)
523523+524524+History (depends on ui primitives)
525525+- [ ] history viewer
526526+- [ ] history search
527527+- [ ] Infinite lossless personal encrypted archive of web history
528528+529529+## Publishing, Provenance, Remote Extensions
530530+531531+- [ ] share system
532532+- [ ] poke at remote loading + provenance
533533+- [ ] publish pages/apps?
534534+- [ ] local publishing w/ Helia or something like this
535535+536536+## Minimum viable web workbench
537537+538538+- [ ] Design philosophy write-up w/ driving principles and characteristics
539539+- [ ] Multi-protocol architecture
540540+- [ ] Content publishing
541541+- [ ] Event model
542542+- [ ] Chaining
543543+- [ ] Images
544544+- [ ] Lists/feeds
545545+546546+## Devtools
547547+548548+- [ ] Devtools button in extension settings cards (open devtools for extension window)
549549+- [ ] Devtools command to open devtools for a specific extension or window
550550+- [ ] Fix `api.extensions.devtools()` - currently not working for consolidated extensions
551551+552552+## Later
553553+554554+storage backends
555555+- [ ] try DuckDB as datastore storage backend instead of SQLite
556556+557557+- [ ] Identities system
558558+- [ ] Contacts integration
559559+- [ ] Collaboration
560560+561561+desktop
562562+- [ ] Tray work
563563+