···13131414Newly done items go here, grouped under level-2 headings by week (date = Monday of that ISO week).
15151616+## 2026-03-11
1717+1818+Desktop - IZUI Navigation
1919+- [x] ESC at root opens Windows switcher — new `escUnhandledPolicy` second-phase policy for workspace windows in active/idle sessions
2020+- [x] Preserve role/escapeMode across session restore — fix canvas mode check to not depend on role
2121+2222+Desktop - Editor
2323+- [x] Add img tag rendering in preview — sanitized HTML img tags with attribute allowlist and protocol security
2424+- [x] Support relative image paths and file:// protocol — resolve images relative to edited file via `peek://local-file/` protocol
2525+2626+Desktop - Groups
2727+- [x] Restructure group detail view header — group name, edit icon, view mode buttons, and inline sort controls in compact layout
2828+- [x] Remove colored dot from group header
2929+3030+Desktop - Shortcuts
3131+- [x] Change Pagestream shortcut from Cmd/Ctrl+P to Cmd/Ctrl+Shift+P (avoids conflict with Print)
3232+3333+Desktop - Docs
3434+- [x] Update README — rewrite intro, add desktop screenshot, Core/Features/Keyboard Shortcuts/Feature API sections
3535+- [x] Rename extension terminology to features throughout docs and README
3636+- [x] Rename docs/extensions.md → features.md, extension-modes.md → feature-modes.md, extension-settings-api.md → feature-settings-api.md
3737+1638## 2026-03-09
17391840Desktop - Extensions
+144-260
README.md
···14141515<img width="969" alt="peek desktop screenshot" src="peek-desktop-screenshot.png">
16161717-## Important notes
1717+## WARNING!
18181919___PEEK IS NOT A BROWSER___
20202121-Peek is not a 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.
2121+Peek is not a 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.
22222323___PEEK IS A CONCEPT PREVIEW___
2424···30303131- **IZUI Navigation** — Inverted Zooming User Interface. ESC-key-based navigation model that provides consistent "zoom out" behavior across all interfaces. Enter from anywhere, ESC to go back — predictable at every level.
3232- **Window Management** — Heterogeneous windowing: chromeless modals, overlays, slides, workspaces and content windows, each with role-specific behavior.
3333-- **Extension System** — All features are extensions with manifest-declared commands, shortcuts, and settings. Extensions can be eager, lazy-loaded, or fully declarative.
3434-- **PubSub Messaging** — Cross-window event system for communication between extensions and windows.
3333+- **Feature System** — Features are not extensions of a monolithic core — they *are* the functionality, built on a minimal foundation. Each feature declares its own commands, shortcuts, and settings. Features can be eager, lazy-loaded, or fully declarative.
3434+- **PubSub Messaging** — Cross-window event system for communication between features and windows.
3535- **Data Persistence** — SQLite datastore with schema management, history tracking, and cross-device sync support.
3636- **peek:// Protocol** — Custom protocol for internal navigation and cross-origin access.
3737-- **Settings** — Per-extension configuration with live reload. `Cmd/Ctrl+,` or tray icon.
3737+- **Settings** — Per-feature configuration with live reload. `Cmd/Ctrl+,` or tray icon.
38383939## Features
40404141-- **Commands** — Graphical command palette (GCLI) for opening pages, executing commands, chaining outputs, and parameter entry. `Ctrl+Cmd+P`
4242-- **Groups** — Categorize, recall and interact with groups of pages. Tag-based with smart and curated grouping. `Ctrl+G`
4343-- **Peeks** — Keyboard-activated modal chromeless web pages for quickly glancing at or interacting with pages. `Opt+0-9`
4444-- **Slides** — Keyboard-activated modal chromeless web pages which slide in from any screen edge. `Opt+Arrow Keys`
4545-- **Editor** — Markdown editor with outline sidebar, live preview, and vim mode. `Ctrl+E`
4141+Peek uses the language of "features" over "extensions". "Extend" implies a larger core that you cannot change. Peek inverts that to small core, with as much changeable as possible. Peek features are modular - they are not *extending* core functionality, they *are* the functionality, built on a small-as-possible core.
4242+4343+- **Commands** — Global-hotkey-activated graphical command bar (GCLI) for opening pages and features, executing commands, chaining commands. `Opt/Alt+space` (global) and Cmd/Ctrl+k (local)
4444+- **Groups** — Categorize, recall and interact with groups of pages. Groups are tags that've been "promoted" intentionally to a group. Groups are also an app-global "mode" (which isn't entirely implemented yet...) `Cmd/Ctrl+G`
4545+- **Peeks** — Global-hotkey-activated modal chromeless web pages for quickly glancing at or interacting with pages. `Opt+0-9`
4646+- **Slides** — Global-hotkey-activated modal chromeless web pages which slide in from any screen edge. `Opt+Arrow Keys`
4747+- **Editor** — Markdown editor with outline sidebar, live preview, vim mode and an *excellent* folding approach. `Cmd/Ctrl+E`
4648- **Search** — Search across all items by text and tags.
4749- **Tags** — Tag, untag, and browse items by tag. Tag visualization and management.
4850- **Tag Actions** — Define custom actions triggered by tags, enabling automated workflows.
4951- **Web Search** — Search the web with engine discovery — Google, DuckDuckGo, Kagi, Bing, Wikipedia, and more.
5050-- **Windows** — Full-screen window switcher overlay showing all open windows as cards. `Ctrl+Shift+W`
5151-- **Pagestream** — Chat-like vertical navigation interface for browsing history. `Ctrl+P`
5252+- **Windows** — Full-screen window switcher overlay showing all open windows as cards. `Cmd/Ctrl+Shift+W`
5353+- **Pagestream** — Chat-like vertical navigation interface for browsing history and opening and viewing pages. `Cmd/Ctrl+Shift+P`
5254- **Entities** — Automatic extraction of people, places, organizations, and events from visited pages.
5355- **Scripts** — Periodically execute scripts against web pages in the background to extract data, with change notifications.
5456- **Files** — Open local files, CSV conversion, markdown formatting, save operations.
5557- **Feeds** — RSS/Atom feed reader.
5656-- **Lex** — Lexicon Studio: AT Protocol identity and data browser/editor.
5757-- **Sheets** — Widget sheets with freeform card layouts hosting webviews.
5858+- **Lexicon Studio** — Lexicon Studio: AT Protocol identity and data browser/editor.
5959+- **Widget Sheets** — Widget sheets with freeform card layouts hosting webviews.
5860- **Timers** — Countdown timers, alarms, stopwatches, and interval timers.
5961- **Sync** — Cross-device synchronization of items, tags, and groups.
6062- **HUD** — Always-on-top heads-up display showing current state and mode. `Ctrl+H`
···6365- "native" web apps — using Peek as a way to "install" web pages on the local device as separate applications
6466- "Peeklets" HUD — select parts of pages to add to a collection rendered as an overlay
65676868+## Keyboard Shortcuts
6969+7070+### Global (work from any application)
7171+7272+| Shortcut | Action |
7373+|----------|--------|
7474+| `Opt+Space` | Open command bar |
7575+| `Opt+0-9` | Open Peeks (configurable, not all registered by default — configure in settings) |
7676+| `Opt+Arrow Keys` | Open Slides (configurable, not all registered by default — configure in settings) |
7777+7878+### Application
7979+8080+| Shortcut | Action |
8181+|----------|--------|
8282+| `ESC` | IZUI navigation — zoom out, go back, close dialogs. At root, opens Windows switcher. Also closes windows depending on role and session state. |
8383+| `Cmd/Ctrl+K` | Open command bar (within app) |
8484+| `Cmd/Ctrl+L` | Command bar URL mode |
8585+| `Cmd/Ctrl+G` | Groups |
8686+| `Cmd/Ctrl+E` | Editor |
8787+| `Cmd/Ctrl+H` | HUD |
8888+| `Cmd/Ctrl+Shift+P` | Pagestream |
8989+| `Cmd/Ctrl+Shift+W` | Windows switcher |
9090+| `Cmd/Ctrl+Shift+F` | Lists search |
9191+| `Cmd/Ctrl+Shift+T` | Undo close window (works for all window types) |
9292+| `Cmd/Ctrl+W` | Close window |
9393+| `Cmd/Ctrl+,` | Settings |
9494+| `Cmd/Ctrl+Q` | Quit |
9595+9696+### Web Page Navigation
9797+9898+| Shortcut | Action |
9999+|----------|--------|
100100+| `Cmd/Ctrl+L` | Focus URL bar |
101101+| `Cmd/Ctrl+R` | Reload page |
102102+| `Cmd+[` / `Cmd+Left` | Go back |
103103+| `Cmd+]` / `Cmd+Right` | Go forward |
104104+66105## Design
67106107107+Some thoughts driving the design of Peek
108108+109109+Core
110110+- Feels like home: trust, comfort, control
111111+- Continuous instances of magical mind-reading
112112+- Sleep at night because no idea or anything you saw is ever lost
113113+- Create, save, classify at the speed of thought
114114+115115+What makes a home / kitchen / workshop
116116+- Everything is right where you need it, b/c you control what is where
117117+- When you know what is where, you can make things with less frustration
118118+- You generally know what’s happening - who’s around/coming/going, etc, not too much surpri
119119+120120+What makes magical mind-readingness
121121+- Frecency everywhere all of the time
122122+- User actions are training data for sorting
123123+- The thing you were thinking of is already at the top of the list
124124+125125+What makes awareness
126126+- Actions tracked at the core
127127+- Metrics generated, rollups displayed, synthesis emergent
128128+- Task context with you at the center (vs asking a companion robot - disempowering!)
129129+130130+Synthesis
131131+- Frecency + adaptive matching gives experience/feeling of magical mind-readingness
132132+- Ability to customize/create/generate interfaces gives the comfort of home
133133+134134+The rules
135135+- Files > arcane/opaque boxes/formats
136136+- Metadata can be weird non-file, as long as consistent
137137+- External systems require consent to touch my stuff
138138+139139+Key capabilities from action/application history chain + addressibility
140140+- Record/replay
141141+- State feedback loops
142142+- Observability
143143+144144+Interface spectrum
145145+- Consistent predicable interfaces are easy, off-the-shelf
146146+- Weird/generative possible via power trio: backgrounding, wm apis, web surface
147147+148148+Difference from browsers
149149+- Web user agents should be bounded by the user, not browser vendor business models
150150+- 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
151151+- Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions
152152+153153+### Task alignment
154154+68155Many 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.
6915670157Characteristics of how we use the web, that are not addressed in contemporary web browsers:
···74161- persistent
75162- data-centric
76163- archival / evidential
7777-7878-Some thoughts driving the design of Peek:
7979-8080-- Web user agents should be bounded by the user, not browser vendor business models
8181-- 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
8282-- Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions
8316484165### Escape IZUI
85166···117198- I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data
118199- Want cloud storage for all config and data, esp infinite history, so can do fun things with it
119200120120-### Feature extensibility
201201+### Feature architecture
121202122122-An extensibility model for achieving "personal web workbench" requires a few things:
123123-- UI extensibility requires OS-level window features beyond what the web allows today (also a baby step towards a minimal OS user interface)
203203+Peek inverts the traditional browser model. Instead of a large monolithic core with an extension API bolted on, Peek has a minimal core with features that *are* the functionality. Features are not extending something — they are the thing.
204204+205205+A modular feature system for achieving "personal web workbench" requires a few things:
206206+- UI modularity requires OS-level window capabilities beyond what the web allows today (also a baby step towards a minimal OS user interface)
124207- 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
125125-- Portable ways of accessing network, storage and compute, which address
208208+- Portable ways of accessing network, storage and compute
126209127127-The current implementation has only a few sketches of that world implemented, and has gone through a few iterations:
128128-- first proof of concept was all Electron - so, privileged JS
210210+The current implementation has gone through a few iterations:
211211+- first proof of concept was all Electron — privileged JS
129212- 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
130213- third and current implementation bundles all features into one web app, with access to smallest possible custom API for platform-level capabilities
131214132132-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.
215215+Features are loaded into the custom `peek` scheme, which provides access to a few special APIs noted in the next section, allows cross-origin network access and other things.
133216134134-This is not ideal, as the extensibility vector is contributions to core, which too tightly bounds experimentation and innovation.
217217+The API surface area is small and portable — features built on it could run in other environments with minimal adaptation.
135218136136-However it's pretty portable given the small custom API surface area.
219219+### Feature API
137220138138-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.
221221+Features are web apps running in the `peek://` scheme. The question driving the API design: what's the minimum capability set a web app needs to build these features?
139222140140-### Peek API
223223+The API is exposed as `window.app` in the feature's execution context:
141224142142-Initially the prototype was all Electron. But that's not interesting, and doesn't
143143-really tell us anything about constraints of the web itself.
225225+- **Windows** — open, close, modify, and track windows with role-based behavior
226226+- **Shortcuts** — register global and local keyboard shortcuts
227227+- **PubSub** — publish and subscribe to messages across features and windows, with scoping (self, global, window)
228228+- **Commands** — register commands for the command bar, with parameter modes and chaining
229229+- **Datastore** — SQLite-backed persistent storage with schema management
230230+- **Escape** — register ESC key handlers for IZUI navigation
231231+- **IZUI** — query and interact with the navigation state machine
232232+- **Files** — open/save dialogs, read/write by path
233233+- **Settings** — per-feature preferences with schema validation
234234+- **Themes** — access current theme, dark mode state
235235+- **Sync** — cross-device synchronization
236236+- **Profiles** — user identity and profile management
237237+- **Net** — network requests (fetch with cross-origin access)
238238+- **Session** — session state and restore
144239145145-So instead I asked this question: What's the minimum capability set that a web app would
146146-need to build the features I need?
147147-148148-The answer, so far, is giving `peek` apps the following APIs:
149149-150150-- window open/close
151151-- global hotkey registration
152152-- pubsub messaging
153153-154154-Custom window api might be able to away entirely, by passing window.open features, working on that.
240240+The API surface is intentionally small and portable — features built on it could run in other environments with minimal adaptation. See [docs/api.md](docs/api.md) for the full reference.
155241156242### Desktop App
157243···167253168254## Contribution
169255170170-- in proto stage
171171-- all dragons, no promises
172172-173173-## Development
174174-175175-```
176176-yarn install
177177-yarn debug
178178-```
179179-180180-### Mobile
181181-182182-- Quick access to Script output and manual runs, as widgets (or output from cloud runners?)
183183-- Peeks still totes useful here - on mobile is more like "quick dial" features
184184-185185-### Cloud
186186-187187-- Going full crypto payments for distributed compute on this one.
188188-189189-## Papercut / use-case log
190190-191191-Core high level actions
192192-- open a web page on top/bottom/left/right
193193-- keep web pages persistent in the background
194194-- quickly open a web page modally, and close it
195195-196196-Misc specific
197197-- open bandcamp in a window, move over to 2nd display, accidently close it while moving around between other windows
198198-- recent books or recipes from newsletters i subscribe to (but probably didn't read)
199199-- extract a table from a page periodically, send it somewhere as csv or whatever (chained actions)
200200-- collect microformats, metadata, events
201201-- web page w/ some locations as an input to a map (creates overlay) "map this page"
202202-- be able to see where a book/etc recommendation came from
203203-- save a tweet, with URL / image / relevant text, but not whole page webrecorder style
204204-- "watch local event listings, rate against my music listening patterns and send me shows i might be interested in going to"
205205-206206-Content scripts
207207-- extract+log shazams
208208-- extract+log spotify playlist
209209-210210-Calculators (variant of script + cmd?)
211211-- page -> table
212212-- page -> summary
213213-- page -> microsummaries
214214-- page -> dates
215215-- page -> events
216216-217217-Workflow deconstructing a "why" task flavour of bookmarking
218218-- save https://www.criterionchannel.com/hong-kong-in-new-york
219219-- extract the movies
220220-- get reference metadata for each (?!)
221221-- add to "to watch list", with pointer back to source url
222222-223223-## Groups
224224-225225-- panorama/tabcandy-ish
226226-- all browser history
227227-- smart groups vs curated groups
228228-- autoclustering on topic/date
229229-- escape from a new page enters default group?
230230-231231-Groups + Cmds
232232-- top/bottom inputs for filtering/grouping/etc
233233-- implemented is a cmd input?
234234-- cmds for opening/searching/finding/viewing/filtering/piping
235235-- cmds for moving pages into groups
236236-- groups -> {x} (eg export/pipe) could depend on the chaining/piping bit (see below)
237237-238238-Architecture
239239-- internally is tags?
240240-- static vs dynamic groups tho?
241241-242242-Publishing
243243-- publishing groups as internal/public feeds?
244244-- to pinboard?
245245-246246-## History view/search
247247-248248-A lot of groups work depends on history being in place, and being accessable and annotate-able.
249249-250250-ideally use chromium history
251251-252252-storage+access
253253-- check out Agregore history viewing approach
254254-- check out state of electron+webext
255255-- other way of accessing underlying chromium history?
256256-257257-features
258258-- awesomebar algo scoring
259259-- adaptive matching
260260-261261-## Chaining / piping
262262-263263-investigate: vague thought re chaining:
264264-- dynamic interstitial representations
265265-- mime type detection?
266266-- eg image previews
267267-- or a table of data
268268-- previews of cmds?
269269-270270-interfaces
271271-- horizontal vs vertical chains
272272-- back/forward navigation?
273273-- each step is a cmd+preview?
274274-- dynamic cmd+previews?
275275-276276-import/export/undo/redo
277277-- record/replay?
278278-- save a chain as a compound action (cmd)?
279279-280280-architecture
281281-- look at web actions/intents/applets
282282-- xml pipeline language
256256+- In proto stage
257257+- All dragons, no promises
283258284259## Mobile
285260286286-- some of the features don't make sense as-is on mobile
287287-- but maybe quick access on mobile to slides/peeks would be nice
288288-- and seeing output of content scripts, or ability to re-run locally on demand
289289-- needs some sync facility (inevitable anyway)
290290-291291-## Use-cases
292292-293293-Peeks
294294-- translate
295295-- calendar
296296-- ai chat
297297-- currency conversion
298298-- everytimezone
299299-- tldraw
300300-301301-Slides
302302-- music: Soundcloud, Hypem
303303-- stock prices
304304-- notepad
305305-- todo list
261261+There's a LOT already done here and I haven't even begun to describe it yet.
306262307307-Scripts
308308-- weather change, eg upcoming weather
309309-- crypto prices
263263+## Server/Cloud
310264311311-Cmd - web
312312-- open url
313313-- web search
314314-- image search
315315-- conversions?
316316-- ddg !actions
265265+Server component is a very passive sync+store service right now.
317266318318-Cmd - system
319319-- search browser history
320320-- set peeks/slides
321321-- open settings
322322-- restart app
323323-- llm prompts
324324-325325-Future
326326-- address something to switch between
327327-- pipe from/to?
328328-329329-Publishing high level
330330-- author web content
331331-- pull in bits from the web
332332-- share preview for feedback
333333-- publish (or at least get output)
334334-335335-Publishing examples
336336-- writing an event recap
337337-338338-Publishing: event recap post
339339-- make a new markdown doc
340340-- sections titled for each video title
341341-- each video's embed code in each section
342342-- navigate around the document for review and updates
343343-- need to easily preview rendered content
344344-- share preview link
345345-- publish (somewhere?)
346346-347347-Music
348348-- commands
349349-- views
350350-- last.fm of my own, to POSSE out
351351-352352-## Unfiled
353353-354354-markdown hot reload previewer w/ toc
355355-- markdown support, with sidebar nav
356356-- reader mode
357357-- hot reload for file:// (other?)
358358-- add side-by-side view
359359-- once md and side-by-side, add side-by-side so the md is the nav, content is the preview
360360-- what's the cmd chain for this?
361361-362362-content types + chaining
363363-- cmd: view as… table, feed, markdown, data points, named entities
364364-- chain: static archive, publish, save, share (os), mailto
365365-- cmd params, eg {url}, which can themselves autocomplete (eg history)
366366-367367-multiprotocol
368368-- at
369369-- ipfs/ipns
370370-- pragmatic addressing+rendering for data (r/d/masl + mime handlers)
371371-372372-broader patterns (chatting w/ luke)
373373-- why do we have to copy/paste?
374374-- devtools and ide are divorced
375375-376376-chainframe/framechain
377377-- (web intents/applets/actions) + (webxdc/miniapps/tiles/farcasterframes)
378378-379379-Small examples of agency
380380-381381-- users can move, resize, change things to their requirements
382382- - eg, browsers restrict min-height of a window, but i should be able make as short as i like
267267+Runs on Railway, I use it daily with few problems (that I know of).
383268384269## History
385270···408293409294---
410295411411-## Automated Summary
412412-413413-Quick reference for developers.
296296+## Automated Summary (somewhat outdated, but some correct stuff too)
414297415415-### Quick Start
298298+### Developer Quick Start
416299417300```bash
418301# Requirements: Node.js 24+
···423306yarn debug # Development mode with devtools
424307yarn start # Normal mode
425308```
309309+Look at package.json for a long list of commands for each of the back-ends and testing.
426310427311See [DEVELOPMENT.md](DEVELOPMENT.md) for full development guide.
428312···433317```
434318peek/
435319├── app/ # Renderer (backend-agnostic)
436436-├── features/ # Built-in extensions
320320+├── features/ # Built-in features
437321├── backend/
438322│ ├── electron/ # Desktop (primary)
439323│ ├── tauri/ # Desktop (Rust alternative)
···448332|-----|-------------|
449333| [DEVELOPMENT.md](DEVELOPMENT.md) | Development setup, commands, architecture |
450334| [docs/api.md](docs/api.md) | Peek API reference (`window.app`) |
451451-| [docs/extensions.md](docs/extensions.md) | Extension development |
452452-| [docs/cmd.md](docs/cmd.md) | Command palette extension |
335335+| [docs/features.md](docs/features.md) | Feature development |
336336+| [docs/cmd.md](docs/cmd.md) | Command palette feature |
453337| [docs/themes.md](docs/themes.md) | Theme system |
454338| [docs/datastore.md](docs/datastore.md) | Data storage and schema |
455339| [docs/sync.md](docs/sync.md) | Cross-device sync |
···474358| **Mobile (JS)** | Script-style | 9 | `yarn test:mobile` |
475359| **Mobile (Rust)** | `cargo test` | 19 | In `backend/tauri-mobile/` |
476360| **Tauri Desktop (Rust)** | `cargo test` | 16 | `yarn test:tauri:rust` |
477477-| **Lex Extension** | Node `--test` | 38 | `node --test features/lex/tests/` |
361361+| **Lex** | Node `--test` | 38 | `node --test features/lex/tests/` |
478362479363**Electron Unit (TS)** — Backend logic: entities extraction, session management, IZUI state, cmd palette logic, cmd chaining, OAuth bridge, display watcher, noun registry, shortcuts, datastore, completers, tag affordances, page loading.
480364···492376493377**Server** — Sync server: API endpoints, backup, migration.
494378495495-**Schema Fidelity** — Validates schema consistency across desktop, mobile, server, and extension datastores.
379379+**Schema Fidelity** — Validates schema consistency across desktop, mobile, server, and browser extension datastores.
496380497381**Sync Integration** — Cross-device sync: integration tests, E2E tests, three-way merge, version compatibility.
498382499499-**Lex Extension** — Lexicon extension: UI logic and background processing.
383383+**Lex** — Lexicon feature: UI logic and background processing.
500384501385Background test commands: `yarn test:electron:bg` runs Playwright headless in background (logs to `/tmp/test-electron.log`).
502386
···11# Peek TODO
2233-## 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 / capabilities / etc
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 / kitchen / workshop
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 with less frustration
2222-- you generally know what’s happening - who’s around/coming/going, etc, not too much surprise (but some!)
2323-2424-what makes magical mind-readingness
2525-- frecency everywhere all of the time
2626-- user actions are training data for sorting
2727-- the thing you were thinking of is already at the top of the list
2828-2929-what makes awareness
3030-- actions tracked at the core
3131-- metrics generated, rollups displayed, synthesis emergent
3232-- task context with you at the center (vs asking a companion robot - disempowering!)
3333-3434-synthesis
3535-- frecency + adaptive matching gives experience/feeling of magical mind-readingness
3636-- ability to customize/create/generate interfaces gives the comfort of home
3737-3838-the rules
3939-- files > arcane/opaque boxes/formats
4040-- metadata can be weird non-file, as long as consistent
4141-- external systems require consent to touch my stuff (eg http caching rules)
4242-4343-key capabilities from action/application history chain + addressibility
4444-4545-- record/replay
4646-- state feedback loops
4747-- observability
4848-4949-interface spectrum
5050-- consistent predicable interfaces are easy, off-the-shelf
5151-- weird/generative possible via power trio: backgrounding, wm apis, web surface
5252-5353-cf
5454-- bulthaup - german kitchen maker w/ designs based on carpentry workshops
5555-563## Unfiled
574585context
···7825- may require connector/parameter context for each peek address load and connector invocation in a chained command
79268027- 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
8181-8282-## UI Componentry
8383-8484-Right now we're replicating/forking html and js across extensions.
8585-8686-problems
8787-- messy, error prone, poor DRY practice
8888-- also means we can't generatively and rapidly build out UIs without whole new piles of html/js/css to manage
8989-9090-What it is
9191-- flexible / reusable system at the ./app layer
9292-- extensions use for creating/generating interfaces
9393-- can override/overlay/inject styling
9494-- easy to make system-consistent ux and themed visual design
9595-- loosely coupled system with deterministic management
9696-- like a set of prebuilt controls
9797-- designed for single-component, or sets
9898-- binds to data source, is reactive to it (events, event-sources, streams, our feed system)
9999-100100-what it isn't
101101-- designed for complex document hierarchies
102102-- js components React-style
103103-104104-usage
105105-- callers instanciate a control
106106-- provide schema/data into a control which has a default template
107107-- template can be replaced by caller
108108-109109-examples/use-cases
110110-- groups, tag ui and windows viewer are all card grids
111111-- chaining is command components + card popups with lists, editors, previews, etc
112112-- after atproto support, this could be used to bind lexicons + data for generated viewing/CRUD interfaces.
113113-- see the Window templates section of this file
114114-- see the Pagestream section of this file
115115-- see the Chaining section of this file
116116-- see the Notes/Editor section of this file
117117-- see the Web page experience section of this file
118118-- see the Unfiled section of this file
119119-- see the Commands section of this file
120120-121121-implementation
122122-- use https://open-ui.org/ as much as possible, should cover a lot, eg, buttons, card/grid, cmd, carousels
123123-- see ~/sync/Sites/base for experiments w/ hud etc
124124-125125-reactive schema+card+data system
126126-- [ ] cards + json schema + data
127127-- [ ] no hierarchy, just single component to start, renders to markup
128128-- [ ] instantiatable with data
129129-- [ ] receive updates to refresh
130130-131131-integration
132132-- [ ] determine how extensions will import from core
133133-- [ ] determine how consumers will apply styles
134134-- [ ] explore node reuse/recycle approaches
135135-136136-ui
137137-- [ ] button
138138-- [ ] button set (eg for tag boards/sets)
139139-- [ ] card
140140-- [ ] list
141141-- [ ] grid
142142-- [ ] vertical carousel of cards (like a chat view w/ interactable focus card)
143143-- [ ] horizontal carousel of cards (eg for command chaining, day ribbons)
144144-- [ ] image viewer
145145-- [ ] command input
146146-- [ ] command suggestion
147147-- [ ] command preview pane
148148-- [ ] search/filters on enumerable items (list, grid)
149149-- [ ] editor
150150-- [ ] column/columns
151151-152152-initial porting
153153-- [ ] groups -> card/cards
154154-- [ ] tags -> card/cards
155155-- [ ] tag sets -> button set
156156-- [ ] cmd -> command input/suggestions
157157-- [ ] cmd chaining -> horizontal carousel, list
158158-159159-popup carousel system
160160-- [ ] horizontal and vertical carousel components
161161-- [ ] see ~/sync/Sites/base/hud.html/css/js for basic ui system
162162-- [ ] active item focused in popup
163163-- [ ] arrow controls and vim directionals
164164-- [ ] port cmd chaining to horizontal carousel popups
165165-- [ ] port cmd previews to vertical carousel popups
166166-167167-button sets
168168-- [ ] set of buttons
169169-- [ ] up/depressed states
170170-- [ ] x endcap option
171171-172172-tags
173173-- [ ] all built on buttons and button sets
174174-- [ ] tag input field
175175-- [ ] combo of selected tags, input w/ filtering search, available tags
176176-177177-## Web page experience (reviewme: partially done)
178178-179179-Page loading core
180180-- [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay??
181181-- [ ] overlay infrastructure for showing metadata, security info
182182-- [ ] interaction with cmd actions (page mode again?)
183183-184184-Basic nav etc
185185-- [ ] hotkey to select url
186186-- [ ] back/forward
187187-- [ ] reload
188188-- [ ] undo last close
189189-- [ ] if url selected in cmd is open in a window already, switch to it (for now)
190190-191191-Page info/metadata/action widgets (depends on window templates maybe?)
192192-- [ ] defaults, eg sec ui
193193-- [ ] metadata (og, whatnot)
194194-- [ ] media (imgs, rss, etc)
195195-- [ ] actions (new extension cmd type?)
196196-- [ ] scripts (tbd)
197197-198198-Titlebar
199199-- [x] show titlebar on hover at top edge of window for all pages
2002820129## Feeds, time-series data
20230···701529desktop
702530- [ ] Tray work
703531532532+## Papercut / use-case log
533533+534534+Core high level actions
535535+- open a web page on top/bottom/left/right
536536+- keep web pages persistent in the background
537537+- quickly open a web page modally, and close it
538538+539539+Misc specific
540540+- open bandcamp in a window, move over to 2nd display, accidently close it while moving around between other windows
541541+- recent books or recipes from newsletters i subscribe to (but probably didn't read)
542542+- extract a table from a page periodically, send it somewhere as csv or whatever (chained actions)
543543+- collect microformats, metadata, events
544544+- web page w/ some locations as an input to a map (creates overlay) "map this page"
545545+- be able to see where a book/etc recommendation came from
546546+- save a tweet, with URL / image / relevant text, but not whole page webrecorder style
547547+- "watch local event listings, rate against my music listening patterns and send me shows i might be interested in going to"
548548+549549+Content scripts
550550+- extract+log shazams
551551+- extract+log spotify playlist
552552+553553+Calculators (variant of script + cmd?)
554554+- page -> table
555555+- page -> summary
556556+- page -> microsummaries
557557+- page -> dates
558558+- page -> events
559559+560560+Workflow deconstructing a "why" task flavour of bookmarking
561561+- save https://www.criterionchannel.com/hong-kong-in-new-york
562562+- extract the movies
563563+- get reference metadata for each (?!)
564564+- add to "to watch list", with pointer back to source url
565565+566566+## Groups
567567+568568+- panorama/tabcandy-ish
569569+- all browser history
570570+- smart groups vs curated groups
571571+- autoclustering on topic/date
572572+- escape from a new page enters default group?
573573+574574+Groups + Cmds
575575+- top/bottom inputs for filtering/grouping/etc
576576+- implemented is a cmd input?
577577+- cmds for opening/searching/finding/viewing/filtering/piping
578578+- cmds for moving pages into groups
579579+- groups -> {x} (eg export/pipe) could depend on the chaining/piping bit (see below)
580580+581581+Architecture
582582+- internally is tags?
583583+- static vs dynamic groups tho?
584584+585585+Publishing
586586+- publishing groups as internal/public feeds?
587587+- to pinboard?
588588+589589+## History view/search
590590+591591+A lot of groups work depends on history being in place, and being accessable and annotate-able.
592592+593593+ideally use chromium history
594594+595595+storage+access
596596+- check out Agregore history viewing approach
597597+- check out state of electron+webext
598598+- other way of accessing underlying chromium history?
599599+600600+features
601601+- awesomebar algo scoring
602602+- adaptive matching
603603+604604+## Chaining / piping
605605+606606+investigate: vague thought re chaining:
607607+- dynamic interstitial representations
608608+- mime type detection?
609609+- eg image previews
610610+- or a table of data
611611+- previews of cmds?
612612+613613+interfaces
614614+- horizontal vs vertical chains
615615+- back/forward navigation?
616616+- each step is a cmd+preview?
617617+- dynamic cmd+previews?
618618+619619+import/export/undo/redo
620620+- record/replay?
621621+- save a chain as a compound action (cmd)?
622622+623623+architecture
624624+- look at web actions/intents/applets
625625+- xml pipeline language
626626+627627+## Mobile
628628+629629+- some of the features don't make sense as-is on mobile
630630+- but maybe quick access on mobile to slides/peeks would be nice
631631+- and seeing output of content scripts, or ability to re-run locally on demand
632632+- needs some sync facility (inevitable anyway)
633633+634634+## Use-cases
635635+636636+Peeks
637637+- translate
638638+- calendar
639639+- ai chat
640640+- currency conversion
641641+- everytimezone
642642+- tldraw
643643+644644+Slides
645645+- music: Soundcloud, Hypem
646646+- stock prices
647647+- notepad
648648+- todo list
649649+650650+Scripts
651651+- weather change, eg upcoming weather
652652+- crypto prices
653653+654654+Cmd - web
655655+- open url
656656+- web search
657657+- image search
658658+- conversions?
659659+- ddg !actions
660660+661661+Cmd - system
662662+- search browser history
663663+- set peeks/slides
664664+- open settings
665665+- restart app
666666+- llm prompts
667667+668668+Future
669669+- address something to switch between
670670+- pipe from/to?
671671+672672+Publishing high level
673673+- author web content
674674+- pull in bits from the web
675675+- share preview for feedback
676676+- publish (or at least get output)
677677+678678+Publishing examples
679679+- writing an event recap
680680+681681+Publishing: event recap post
682682+- make a new markdown doc
683683+- sections titled for each video title
684684+- each video's embed code in each section
685685+- navigate around the document for review and updates
686686+- need to easily preview rendered content
687687+- share preview link
688688+- publish (somewhere?)
689689+690690+Music
691691+- commands
692692+- views
693693+- last.fm of my own, to POSSE out
694694+695695+## Unfiled
696696+697697+markdown hot reload previewer w/ toc
698698+- markdown support, with sidebar nav
699699+- reader mode
700700+- hot reload for file:// (other?)
701701+- add side-by-side view
702702+- once md and side-by-side, add side-by-side so the md is the nav, content is the preview
703703+- what's the cmd chain for this?
704704+705705+content types + chaining
706706+- cmd: view as… table, feed, markdown, data points, named entities
707707+- chain: static archive, publish, save, share (os), mailto
708708+- cmd params, eg {url}, which can themselves autocomplete (eg history)
709709+710710+multiprotocol
711711+- at
712712+- ipfs/ipns
713713+- pragmatic addressing+rendering for data (r/d/masl + mime handlers)
714714+715715+broader patterns (chatting w/ luke)
716716+- why do we have to copy/paste?
717717+- devtools and ide are divorced
718718+719719+chainframe/framechain
720720+- (web intents/applets/actions) + (webxdc/miniapps/tiles/farcasterframes)
721721+722722+Small examples of agency
723723+724724+- users can move, resize, change things to their requirements
725725+ - eg, browsers restrict min-height of a window, but i should be able make as short as i like
726726+