···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)
10101111-## Design principles
1111+## Design principles / capablities / etc
12121313core
1414- feels like home: trust, comfort, control
···1919what 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+- you generally know what’s happening - who’s around/coming/going, etc, not a lot of surprises
2323+2424+what makes magical mind-readingness
2525+- frecency everywhere all of the time: user actions are training data for sorting
2626+2727+what provides awareness
2828+- actions tracked at the core
2929+- metrics generated, rollups displayed, synthesis emergent
22302331synthesis
2432- frecency + adaptive matching gives experience/feeling of magical mind-readingness
2533- ability to customize/create/generate interfaces gives the comfort of home
26342727-cf
2828-- bulthaup - german kitchen company w/ designs based on carpentry workshops
2929-3035the rules
3136- files > arcane/opaque boxes/formats
3237- metadata can be weird non-file, as long as consistent
3338- external systems require consent to touch my stuff (eg http caching rules)
34394040+key capabilities from action/application history chain + addressibility
4141+4242+- record/replay
4343+- state feedback loops
4444+- observability
4545+4646+interface spectrum
4747+- consistent predicable interfaces are easy, off-the-shelf
4848+- weird/generative possible via power trio: backgrounding, wm apis, web surface
4949+5050+cf
5151+- bulthaup - german kitchen maker w/ designs based on carpentry workshops
5252+3553## Unfiled
36543755context
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?
5656+- [ ] implement old context plan: https://github.com/autonome/context
5757+- [ ] implement as extension, expose as api or data emitter?
5858+- eg https://www.reddit.com/r/hackernews/comments/1qddidm/sun_position_calculator/
42594360peeks on links
4461- [ ] click modifier to one-off peek a link
4562- [ ] anchored to cursor w/in window bounds
4663- [ ] as an extension? hotkey + page viewer
47644848-once we have cardinal ui
6565+## To make
6666+4967- [ ] option to flash keyboard shortcuts on screen
5068- [ ] pop up a board of built-in shortcuts/actions
5169- [ ] pop up a board of common shortcuts/actions you use
52705353-## Use cases
7171+- [ ] daily ribbon along bottom of screen, populated with actions and favicons of pages loaded (filter on web only?)
54725555-key capabilities from application history chain + addressibility
5656-5757-- record/replay
5858-- state feedback loops
5959-- observability
6060-6161-to build
6262-- [ ] daily ribbon along bottom of screen, populated with actions and favicons of pages loaded (filter on web only?)
6373- [ ] step counter: app level interaction tracing/counting. when is reset? when does action end and new one start?
64746565-maybe todo
6666-- app level interaction tracing/counting - when is reset? what makes a discrete action start/stop/change?
6775- may require connector/parameter context for each peek address load and connector invocation in a chained command
6868-- peeks/slides as addresses + metadata? or urls? eg open({json of peek url + context}) => localhost in left slide, or peek://slide?where=top&url=http://localhost? both?
69767070-Review against impl
7777+- peeks/slides as addresses + metadata? or urls? eg open({json of peek url + context}) => localhost in left slide, or peek://slide?where=top&url=http://localhost? both? opens up the idea of packaging these declaratively, and no-code createable
71787279## UI Componentry
7380···164171- [ ] tag input field
165172- [ ] combo of selected tags, input w/ filtering search, available tags
166173174174+## Web page experience (reviewme: partially done)
175175+176176+Page loading core
177177+- [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay??
178178+- [ ] overlay infrastructure for showing metadata, security info
179179+- [ ] interaction with cmd actions (page mode again?)
180180+181181+Basic nav etc
182182+- [ ] hotkey to select url
183183+- [ ] back/forward
184184+- [ ] reload
185185+- [ ] undo last close
186186+- [ ] if url selected in cmd is open in a window already, switch to it (for now)
187187+188188+Page info/metadata/action widgets (depends on window templates maybe?)
189189+- [ ] defaults, eg sec ui
190190+- [ ] metadata (og, whatnot)
191191+- [ ] media (imgs, rss, etc)
192192+- [ ] actions (new extension cmd type?)
193193+- [ ] scripts (tbd)
194194+195195+Titlebar
196196+- [x] show titlebar on hover at top edge of window for all pages
197197+198198+## Feeds, time-series data
199199+200200+We need a generalized system for feeds and time-series data.
201201+It might be two different systems, based on analysis of the use-cases.
202202+It might be a new system + the items system we already have, and using metadata.
203203+204204+Use-case: Querying web pages for time-series data
205205+- Eg a bank account balance, stock price, weather report
206206+- Periodically load a web page in background hiddent window, and run a content script against it, returning a value and writing it to datastore (and metadata like page url, created/updated, custom metadata)
207207+- Have a widget that shows latest value and its age
208208+- Have a widget that shows graph of values over time
209209+210210+Use-case: Checking web page for ticket availability
211211+- Want to know when tickets go on sale for an event
212212+- Periodically load a page in background, and run a content script against it
213213+- Notify user when page change matched some criteria
214214+215215+Use-case: Pull data from external systems
216216+- Eg RSS feeds or importing my posts/etc from other accounts - plays on Soundcloud, or thumbs-ups on Youtube, etc
217217+- Imagine an extension which walks you through Oauth login for various systems, and then pulls their data into Peek via the system's API. Could be URLs with custom metadata (like Soundcloud plays) or non-URL data (like sports scores)
218218+- Or someone could implement a feed reader extension focused on RSS reading
219219+220220+Use-case: System metrics
221221+- We need to be able to log and reflect all kinds of system information
222222+- See the "Metadata, QS and reflection" section in this document for examples
223223+- Other examples: datastore size-on-disk, ongoing performance and resource usage data
224224+- Surface these in diagnostic panels, widgets, HUDs, etc
225225+226226+- [ ] API for logging outputs to datastore (time series data, feeds)
227227+228228+uses
229229+- [ ] tag streaks -> atproto streaks (feeds + daytum)
230230+231231+## Entity centrism (NER streams)
232232+233233+- [ ] get people, places, dates/times/events
234234+- [ ] get meaningful numbers, and their label
235235+- [ ] extract a table as csv
236236+- [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page)
237237+238238+239239+- [ ] Entity catalog definition (eg Wikidata defs, or custom to start?)
240240+- [ ] Datastore support
241241+- [ ] Basic NER testing (regex, etc)
242242+- [ ] Page metadata viz
243243+- [ ] Entity search/browse
244244+- [ ] ML NER
245245+246246+## Widgets
247247+248248+notes/questions
249249+- maybe just cards in a sheet, fillable
250250+- api for extensions to publish into
251251+- fill either template+data
252252+- or extension publishing into, iframe-like
253253+- review w3c spec
254254+- are widgets mini-apps (in spec sense)
255255+- what aspects of tiles do they have?
256256+- should be called widgets, or something else?
257257+258258+core uses
259259+- page metadata panels
260260+- command previews
261261+- observability hud
262262+- calculators
263263+264264+helpers
265265+- widget sheets? overlays of widgets, etc - like window manager views/templates, which don't require extensions, reusable
266266+267267+- fun with feeds + widgets
268268+- daytum style custom tracking/displaying
269269+270270+- sheet widgets - tabular data in a reactive resizable widget view (chain query -> tabular -> sheet -> widget)
271271+167272## Modes/scopes
168273169274notes
···182287- [ ] How does cmd indicate scope/target?
183288 - [ ] eg "Target: [window title]" header when window-scoped command is selected?
184289185185-## Web page experience (reviewme: partially done)
290290+## Content-/User-scripts
291291+292292+- [ ] Command support for blocking on a content script running
293293+- [ ] Extension api for executing arbitrary scripts against a page
294294+- [ ] Timeouts for page scripts in commands
295295+- [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho)
296296+- [ ] Page load triggers for background scripts
186297187187-Page loading core
188188-- [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay??
189189-- [ ] overlay infrastructure for showing metadata, security info
190190-- [ ] interaction with cmd actions (page mode again?)
298298+299299+## Browser status quo extensibility
191300192192-Basic nav etc
193193-- [ ] hotkey to select url
194194-- [ ] back/forward
195195-- [ ] reload
196196-- [ ] undo last close
197197-- [ ] if url selected in cmd is open in a window already, switch to it (for now)
301301+Status quo
302302+- [ ] Browser extensions (limited, to get a couple of popular ones working)
303303+- [ ] Opensearch plugins
304304+- [ ] Quicksearch
305305+- [ ] Bookmark keywords (equivalent)
306306+- [ ] Bookmarklets (equivalent)
307307+- [ ] Userscripts (cf general approach to content/user scripts)
308308+- [ ] Language packs (cf general approach to i18n/l10n)
198309199199-Page info/metadata/action widgets (depends on window templates maybe?)
200200-- [ ] defaults, eg sec ui
201201-- [ ] metadata (og, whatnot)
202202-- [ ] media (imgs, rss, etc)
203203-- [ ] actions (new extension cmd type?)
204204-- [ ] scripts (tbd)
310310+Search
311311+- [ ] Local
312312+- [ ] OpenSearch
205313206206-Titlebar
207207-- [ ] show titlebar on hover at top edge of window for all pages
314314+Web extensions
315315+- [x] WebExtension integration for bundled extensions (Electron, using electron-chrome-extensions)
316316+- [x] @cliqz/adblocker-electron for native ad blocking
317317+- [x] Consent-O-Matic for automatic cookie consent handling (MIT, Aarhus University)
318318+- [ ] Proton Pass for password management
319319+- [ ] Enable/disable toggles in Settings UI
208320209321## Metadata, QS and reflection
210322211211-- [ ] tabstats for peek
323323+- [ ] basically tabstats for peek - pages opened, switched, closed
212324- [ ] view: a page of different widgets showing this info, or a hud/dashboard
213325326326+327327+collections (depends on feeds?)
328328+- interaction count
329329+- page load count
330330+- page open
331331+- page switch
332332+- page close
333333+- open window count
334334+- hidden+visible window count
335335+336336+interaction tracing/counting
337337+- [ ] when is reset? what makes a discrete action start/stop/change?
338338+339339+hud playground
340340+- [ ] hud for system data (number of windows, etc
341341+- [ ] using timeseries/feeds api
342342+- [ ] each as widgets
343343+344344+## History
345345+346346+- [ ] history views (again using groups ui, maybe plug that into an extension itself?)
347347+348348+History (depends on ui primitives)
349349+- [ ] history viewer
350350+- [ ] history search
351351+- [ ] Infinite lossless personal encrypted archive of web history
352352+214353## Files-ness
215354216355- [ ] access to notes folder(s) on filesystem to import+sync
217356- [ ] syncing peek-only ontes as markdown files in specified dir (or library, boo)
357357+358358+manual imports
218359- [ ] import signal note-to-self archive into peek notes
360360+- [ ] stickiets
219361220362## Accounts/profiles/sync safety/fidelity
221363···260402261403## Pagestream
262404263263-- a new peek web navigational system
405405+A web navigational system with a vertical chat-like view of web history.
406406+264407- vertical up/down chat-style history of pages/actions
265265-- left/right for page-specific stuff
266266-- maybe uses carousels + window template from ui componentry?
408408+- but floating cards, not chat bubbles in a column
409409+- left/right for page-specific metadata/actions
410410+- uses vertical carousel component + page view
411411+- vim navigational keys
412412+- active card pops up/open
413413+- screenshots for pages
414414+- open new page == scroll to bottom == open a "new tab" kind of view
415415+- cmd+L -> url, adds to bottom of "chat"
267416268417## Notes & Editor
269418···412561- [ ] take and save screenshot of loaded windows for any new address
413562- [ ] store in profile screenshot cache, and save that as metadata record on the address
414563415415-## Extension back-end
416416-417417-- [ ] tbd
418564419565## Server Backend
420566···429575- [ ] Add migration dry-run mode
430576- [ ] Add automatic backup cleanup after grace period
431577432432-## harvester / hearts and stars
578578+## Extension: harvester
579579+580580+- [ ] push all services to peek node webhook, eg bsky likes, reddit
581581+582582+- oauthwonderwall?
583583+584584+## Extension: hearts and stars
433585434434-- [ ] push all services to peek node webhook, eg bsky like, reddit, oauthwonderwall?
586586+- tweetdeck-like column set, but narrower and each a feed
435587436588## Mobile
437589···444596- [ ] export/import
445597- [ ] session restore
446598447447-## Browser status quo extensibility
448448-449449-Status quo
450450-- [ ] Browser extensions (limited, to get a couple of popular ones working)
451451-- [ ] Opensearch plugins
452452-- [ ] Quicksearch
453453-- [ ] Bookmark keywords (equivalent)
454454-- [ ] Bookmarklets (equivalent)
455455-- [ ] Userscripts (cf general approach to content/user scripts)
456456-- [ ] Language packs (cf general approach to i18n/l10n)
457457-458458-Search
459459-- [ ] Local
460460-- [ ] OpenSearch
461461-462462-Web extensions
463463-- [x] WebExtension integration for bundled extensions (Electron, using electron-chrome-extensions)
464464-- [x] @cliqz/adblocker-electron for native ad blocking
465465-- [x] Consent-O-Matic for automatic cookie consent handling (MIT, Aarhus University)
466466-- [ ] Proton Pass for password management
467467-- [ ] Enable/disable toggles in Settings UI
468468-469469-## Feeds, time-series, scripts
470470-471471-- [ ] API for logging outputs to datastore (time series data, feeds)
472472-- [ ] Command support for blocking on a content script running
473473-- [ ] Extension api for executing arbitrary scripts against a page
474474-- [ ] Timeouts for page scripts in commands
475475-- [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho)
476476-- [ ] Page load triggers for background scripts
477477-478478-- [ ] tag streaks -> atproto streaks (feeds + daytum)
479479-- [ ] 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?)
480480-481481-## Entity centrism (NER streams)
482482-483483-- [ ] get people, places, dates/times/events
484484-- [ ] get meaningful numbers, and their label
485485-- [ ] extract a table as csv
486486-- [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page)
487487-488488-489489-- [ ] Entity catalog definition (eg Wikidata defs, or custom to start?)
490490-- [ ] Datastore support
491491-- [ ] Basic NER testing (regex, etc)
492492-- [ ] Page metadata viz
493493-- [ ] Entity search/browse
494494-- [ ] ML NER
495495-496599## Archiving / expiration
497600498601- [ ] archived notes (lower score, hidden by default)
···500603## Sorting/scoring/magic
501604502605Generally default is based on the old Firefox "awesomebar" scoring/search algorithms.
606606+503607Frecency + adaptive matching.
608608+504609The app *learns* you, and what you want magically appears w/o AI as requirement.
505610506611## Desktop Performance
···534639- [ ] Slides: soundcloud, crypto prices, notepad, todo list
535640- [ ] Scripts: stock price, weather change
536641537537-## History
538538-539539-- [ ] history views (again using groups ui, maybe plug that into an extension itself?)
540540-541541-History (depends on ui primitives)
542542-- [ ] history viewer
543543-- [ ] history search
544544-- [ ] Infinite lossless personal encrypted archive of web history
545545-546642## Publishing, Provenance, Remote Extensions
547643644644+misc ideas
548645- [ ] share system
549646- [ ] poke at remote loading + provenance
550647- [ ] publish pages/apps?
551551-- [ ] local publishing w/ Helia or something like this
648648+649649+experiment: helia
650650+- [ ] local publishing, eg use editor to write a blog post, hit publish… and share (handwave)
552651553652## Minimum viable web workbench
554653···566665- [ ] Devtools command to open devtools for a specific extension or window
567666- [ ] Fix `api.extensions.devtools()` - currently not working for consolidated extensions
568667569569-## Later
668668+## Storage
570669571571-storage backends
572670- [ ] try DuckDB as datastore storage backend instead of SQLite
671671+672672+673673+## Parking lot
573674574675- [ ] Identities system
575676- [ ] Contacts integration
+1-1
schema/generated/sqlite-full.sql
···11-- Generated by schema/codegen.js
22-- Schema version: 1
33--- Generated: 2026-02-04T15:56:41.699Z
33+-- Generated: 2026-02-04T16:01:13.308Z
44-- DO NOT EDIT - regenerate with: yarn schema:codegen
5566-- Unified content storage - URLs, text notes, tagsets, and images
+1-1
schema/generated/sqlite-sync.sql
···11-- Generated by schema/codegen.js
22-- Schema version: 1
33--- Generated: 2026-02-04T15:56:41.700Z
33+-- Generated: 2026-02-04T16:01:13.309Z
44-- DO NOT EDIT - regenerate with: yarn schema:codegen
5566-- Unified content storage - URLs, text notes, tagsets, and images
+1-1
schema/generated/types.rs
···11// Generated by schema/codegen.js
22// Schema version: 1
33-// Generated: 2026-02-04T15:56:41.700Z
33+// Generated: 2026-02-04T16:01:13.310Z
44// DO NOT EDIT - regenerate with: yarn schema:codegen
5566use serde::{Deserialize, Serialize};