experiments in a post-browser web
10
fork

Configure Feed

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

update todo

+216 -115
+212 -111
TODO.md
··· 8 8 - This file is not for notes or description - link to documents in ./notes for that 9 9 - Checkbox states: `- [ ]` pending, `- [~]` in-progress (move to WIP.md), `- [x]` done (move to CHANGELOG.md) 10 10 11 - ## Design principles 11 + ## Design principles / capablities / etc 12 12 13 13 core 14 14 - feels like home: trust, comfort, control ··· 19 19 what makes a home 20 20 - everything is right where you need it, b/c you control what is where 21 21 - when you know what is where, you can make things without frustration 22 + - you generally know what’s happening - who’s around/coming/going, etc, not a lot of surprises 23 + 24 + what makes magical mind-readingness 25 + - frecency everywhere all of the time: user actions are training data for sorting 26 + 27 + what provides awareness 28 + - actions tracked at the core 29 + - metrics generated, rollups displayed, synthesis emergent 22 30 23 31 synthesis 24 32 - frecency + adaptive matching gives experience/feeling of magical mind-readingness 25 33 - ability to customize/create/generate interfaces gives the comfort of home 26 34 27 - cf 28 - - bulthaup - german kitchen company w/ designs based on carpentry workshops 29 - 30 35 the rules 31 36 - files > arcane/opaque boxes/formats 32 37 - metadata can be weird non-file, as long as consistent 33 38 - external systems require consent to touch my stuff (eg http caching rules) 34 39 40 + key capabilities from action/application history chain + addressibility 41 + 42 + - record/replay 43 + - state feedback loops 44 + - observability 45 + 46 + interface spectrum 47 + - consistent predicable interfaces are easy, off-the-shelf 48 + - weird/generative possible via power trio: backgrounding, wm apis, web surface 49 + 50 + cf 51 + - bulthaup - german kitchen maker w/ designs based on carpentry workshops 52 + 35 53 ## Unfiled 36 54 37 55 context 38 - - [ ] implement old context plan eg https://www.reddit.com/r/hackernews/comments/1qddidm/sun_position_calculator/ 39 - 40 - server 41 - - [ ] edgeworkernode/server vs what we got now? both? lite-version, or this it? 56 + - [ ] implement old context plan: https://github.com/autonome/context 57 + - [ ] implement as extension, expose as api or data emitter? 58 + - eg https://www.reddit.com/r/hackernews/comments/1qddidm/sun_position_calculator/ 42 59 43 60 peeks on links 44 61 - [ ] click modifier to one-off peek a link 45 62 - [ ] anchored to cursor w/in window bounds 46 63 - [ ] as an extension? hotkey + page viewer 47 64 48 - once we have cardinal ui 65 + ## To make 66 + 49 67 - [ ] option to flash keyboard shortcuts on screen 50 68 - [ ] pop up a board of built-in shortcuts/actions 51 69 - [ ] pop up a board of common shortcuts/actions you use 52 70 53 - ## Use cases 71 + - [ ] daily ribbon along bottom of screen, populated with actions and favicons of pages loaded (filter on web only?) 54 72 55 - key capabilities from application history chain + addressibility 56 - 57 - - record/replay 58 - - state feedback loops 59 - - observability 60 - 61 - to build 62 - - [ ] daily ribbon along bottom of screen, populated with actions and favicons of pages loaded (filter on web only?) 63 73 - [ ] step counter: app level interaction tracing/counting. when is reset? when does action end and new one start? 64 74 65 - maybe todo 66 - - app level interaction tracing/counting - when is reset? what makes a discrete action start/stop/change? 67 75 - may require connector/parameter context for each peek address load and connector invocation in a chained command 68 - - 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? 69 76 70 - Review against impl 77 + - 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 71 78 72 79 ## UI Componentry 73 80 ··· 164 171 - [ ] tag input field 165 172 - [ ] combo of selected tags, input w/ filtering search, available tags 166 173 174 + ## Web page experience (reviewme: partially done) 175 + 176 + Page loading core 177 + - [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay?? 178 + - [ ] overlay infrastructure for showing metadata, security info 179 + - [ ] interaction with cmd actions (page mode again?) 180 + 181 + Basic nav etc 182 + - [ ] hotkey to select url 183 + - [ ] back/forward 184 + - [ ] reload 185 + - [ ] undo last close 186 + - [ ] if url selected in cmd is open in a window already, switch to it (for now) 187 + 188 + Page info/metadata/action widgets (depends on window templates maybe?) 189 + - [ ] defaults, eg sec ui 190 + - [ ] metadata (og, whatnot) 191 + - [ ] media (imgs, rss, etc) 192 + - [ ] actions (new extension cmd type?) 193 + - [ ] scripts (tbd) 194 + 195 + Titlebar 196 + - [x] show titlebar on hover at top edge of window for all pages 197 + 198 + ## Feeds, time-series data 199 + 200 + We need a generalized system for feeds and time-series data. 201 + It might be two different systems, based on analysis of the use-cases. 202 + It might be a new system + the items system we already have, and using metadata. 203 + 204 + Use-case: Querying web pages for time-series data 205 + - Eg a bank account balance, stock price, weather report 206 + - 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) 207 + - Have a widget that shows latest value and its age 208 + - Have a widget that shows graph of values over time 209 + 210 + Use-case: Checking web page for ticket availability 211 + - Want to know when tickets go on sale for an event 212 + - Periodically load a page in background, and run a content script against it 213 + - Notify user when page change matched some criteria 214 + 215 + Use-case: Pull data from external systems 216 + - Eg RSS feeds or importing my posts/etc from other accounts - plays on Soundcloud, or thumbs-ups on Youtube, etc 217 + - 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) 218 + - Or someone could implement a feed reader extension focused on RSS reading 219 + 220 + Use-case: System metrics 221 + - We need to be able to log and reflect all kinds of system information 222 + - See the "Metadata, QS and reflection" section in this document for examples 223 + - Other examples: datastore size-on-disk, ongoing performance and resource usage data 224 + - Surface these in diagnostic panels, widgets, HUDs, etc 225 + 226 + - [ ] API for logging outputs to datastore (time series data, feeds) 227 + 228 + uses 229 + - [ ] tag streaks -> atproto streaks (feeds + daytum) 230 + 231 + ## Entity centrism (NER streams) 232 + 233 + - [ ] get people, places, dates/times/events 234 + - [ ] get meaningful numbers, and their label 235 + - [ ] extract a table as csv 236 + - [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page) 237 + 238 + 239 + - [ ] Entity catalog definition (eg Wikidata defs, or custom to start?) 240 + - [ ] Datastore support 241 + - [ ] Basic NER testing (regex, etc) 242 + - [ ] Page metadata viz 243 + - [ ] Entity search/browse 244 + - [ ] ML NER 245 + 246 + ## Widgets 247 + 248 + notes/questions 249 + - maybe just cards in a sheet, fillable 250 + - api for extensions to publish into 251 + - fill either template+data 252 + - or extension publishing into, iframe-like 253 + - review w3c spec 254 + - are widgets mini-apps (in spec sense) 255 + - what aspects of tiles do they have? 256 + - should be called widgets, or something else? 257 + 258 + core uses 259 + - page metadata panels 260 + - command previews 261 + - observability hud 262 + - calculators 263 + 264 + helpers 265 + - widget sheets? overlays of widgets, etc - like window manager views/templates, which don't require extensions, reusable 266 + 267 + - fun with feeds + widgets 268 + - daytum style custom tracking/displaying 269 + 270 + - sheet widgets - tabular data in a reactive resizable widget view (chain query -> tabular -> sheet -> widget) 271 + 167 272 ## Modes/scopes 168 273 169 274 notes ··· 182 287 - [ ] How does cmd indicate scope/target? 183 288 - [ ] eg "Target: [window title]" header when window-scoped command is selected? 184 289 185 - ## Web page experience (reviewme: partially done) 290 + ## Content-/User-scripts 291 + 292 + - [ ] Command support for blocking on a content script running 293 + - [ ] Extension api for executing arbitrary scripts against a page 294 + - [ ] Timeouts for page scripts in commands 295 + - [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho) 296 + - [ ] Page load triggers for background scripts 186 297 187 - Page loading core 188 - - [ ] how to load pages - raw browserwindow (what we do now), webview in a default transparent page that hosts overlay?? 189 - - [ ] overlay infrastructure for showing metadata, security info 190 - - [ ] interaction with cmd actions (page mode again?) 298 + 299 + ## Browser status quo extensibility 191 300 192 - Basic nav etc 193 - - [ ] hotkey to select url 194 - - [ ] back/forward 195 - - [ ] reload 196 - - [ ] undo last close 197 - - [ ] if url selected in cmd is open in a window already, switch to it (for now) 301 + Status quo 302 + - [ ] Browser extensions (limited, to get a couple of popular ones working) 303 + - [ ] Opensearch plugins 304 + - [ ] Quicksearch 305 + - [ ] Bookmark keywords (equivalent) 306 + - [ ] Bookmarklets (equivalent) 307 + - [ ] Userscripts (cf general approach to content/user scripts) 308 + - [ ] Language packs (cf general approach to i18n/l10n) 198 309 199 - Page info/metadata/action widgets (depends on window templates maybe?) 200 - - [ ] defaults, eg sec ui 201 - - [ ] metadata (og, whatnot) 202 - - [ ] media (imgs, rss, etc) 203 - - [ ] actions (new extension cmd type?) 204 - - [ ] scripts (tbd) 310 + Search 311 + - [ ] Local 312 + - [ ] OpenSearch 205 313 206 - Titlebar 207 - - [ ] show titlebar on hover at top edge of window for all pages 314 + Web extensions 315 + - [x] WebExtension integration for bundled extensions (Electron, using electron-chrome-extensions) 316 + - [x] @cliqz/adblocker-electron for native ad blocking 317 + - [x] Consent-O-Matic for automatic cookie consent handling (MIT, Aarhus University) 318 + - [ ] Proton Pass for password management 319 + - [ ] Enable/disable toggles in Settings UI 208 320 209 321 ## Metadata, QS and reflection 210 322 211 - - [ ] tabstats for peek 323 + - [ ] basically tabstats for peek - pages opened, switched, closed 212 324 - [ ] view: a page of different widgets showing this info, or a hud/dashboard 213 325 326 + 327 + collections (depends on feeds?) 328 + - interaction count 329 + - page load count 330 + - page open 331 + - page switch 332 + - page close 333 + - open window count 334 + - hidden+visible window count 335 + 336 + interaction tracing/counting 337 + - [ ] when is reset? what makes a discrete action start/stop/change? 338 + 339 + hud playground 340 + - [ ] hud for system data (number of windows, etc 341 + - [ ] using timeseries/feeds api 342 + - [ ] each as widgets 343 + 344 + ## History 345 + 346 + - [ ] history views (again using groups ui, maybe plug that into an extension itself?) 347 + 348 + History (depends on ui primitives) 349 + - [ ] history viewer 350 + - [ ] history search 351 + - [ ] Infinite lossless personal encrypted archive of web history 352 + 214 353 ## Files-ness 215 354 216 355 - [ ] access to notes folder(s) on filesystem to import+sync 217 356 - [ ] syncing peek-only ontes as markdown files in specified dir (or library, boo) 357 + 358 + manual imports 218 359 - [ ] import signal note-to-self archive into peek notes 360 + - [ ] stickiets 219 361 220 362 ## Accounts/profiles/sync safety/fidelity 221 363 ··· 260 402 261 403 ## Pagestream 262 404 263 - - a new peek web navigational system 405 + A web navigational system with a vertical chat-like view of web history. 406 + 264 407 - vertical up/down chat-style history of pages/actions 265 - - left/right for page-specific stuff 266 - - maybe uses carousels + window template from ui componentry? 408 + - but floating cards, not chat bubbles in a column 409 + - left/right for page-specific metadata/actions 410 + - uses vertical carousel component + page view 411 + - vim navigational keys 412 + - active card pops up/open 413 + - screenshots for pages 414 + - open new page == scroll to bottom == open a "new tab" kind of view 415 + - cmd+L -> url, adds to bottom of "chat" 267 416 268 417 ## Notes & Editor 269 418 ··· 412 561 - [ ] take and save screenshot of loaded windows for any new address 413 562 - [ ] store in profile screenshot cache, and save that as metadata record on the address 414 563 415 - ## Extension back-end 416 - 417 - - [ ] tbd 418 564 419 565 ## Server Backend 420 566 ··· 429 575 - [ ] Add migration dry-run mode 430 576 - [ ] Add automatic backup cleanup after grace period 431 577 432 - ## harvester / hearts and stars 578 + ## Extension: harvester 579 + 580 + - [ ] push all services to peek node webhook, eg bsky likes, reddit 581 + 582 + - oauthwonderwall? 583 + 584 + ## Extension: hearts and stars 433 585 434 - - [ ] push all services to peek node webhook, eg bsky like, reddit, oauthwonderwall? 586 + - tweetdeck-like column set, but narrower and each a feed 435 587 436 588 ## Mobile 437 589 ··· 444 596 - [ ] export/import 445 597 - [ ] session restore 446 598 447 - ## Browser status quo extensibility 448 - 449 - Status quo 450 - - [ ] Browser extensions (limited, to get a couple of popular ones working) 451 - - [ ] Opensearch plugins 452 - - [ ] Quicksearch 453 - - [ ] Bookmark keywords (equivalent) 454 - - [ ] Bookmarklets (equivalent) 455 - - [ ] Userscripts (cf general approach to content/user scripts) 456 - - [ ] Language packs (cf general approach to i18n/l10n) 457 - 458 - Search 459 - - [ ] Local 460 - - [ ] OpenSearch 461 - 462 - Web extensions 463 - - [x] WebExtension integration for bundled extensions (Electron, using electron-chrome-extensions) 464 - - [x] @cliqz/adblocker-electron for native ad blocking 465 - - [x] Consent-O-Matic for automatic cookie consent handling (MIT, Aarhus University) 466 - - [ ] Proton Pass for password management 467 - - [ ] Enable/disable toggles in Settings UI 468 - 469 - ## Feeds, time-series, scripts 470 - 471 - - [ ] API for logging outputs to datastore (time series data, feeds) 472 - - [ ] Command support for blocking on a content script running 473 - - [ ] Extension api for executing arbitrary scripts against a page 474 - - [ ] Timeouts for page scripts in commands 475 - - [ ] Support for scheduling scripts (or maybe that's just in the extension... harder to manage tho) 476 - - [ ] Page load triggers for background scripts 477 - 478 - - [ ] tag streaks -> atproto streaks (feeds + daytum) 479 - - [ ] 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?) 480 - 481 - ## Entity centrism (NER streams) 482 - 483 - - [ ] get people, places, dates/times/events 484 - - [ ] get meaningful numbers, and their label 485 - - [ ] extract a table as csv 486 - - [ ] layer outside of web page, and in between pages (eg event page -> event -> any calendar page) 487 - 488 - 489 - - [ ] Entity catalog definition (eg Wikidata defs, or custom to start?) 490 - - [ ] Datastore support 491 - - [ ] Basic NER testing (regex, etc) 492 - - [ ] Page metadata viz 493 - - [ ] Entity search/browse 494 - - [ ] ML NER 495 - 496 599 ## Archiving / expiration 497 600 498 601 - [ ] archived notes (lower score, hidden by default) ··· 500 603 ## Sorting/scoring/magic 501 604 502 605 Generally default is based on the old Firefox "awesomebar" scoring/search algorithms. 606 + 503 607 Frecency + adaptive matching. 608 + 504 609 The app *learns* you, and what you want magically appears w/o AI as requirement. 505 610 506 611 ## Desktop Performance ··· 534 639 - [ ] Slides: soundcloud, crypto prices, notepad, todo list 535 640 - [ ] Scripts: stock price, weather change 536 641 537 - ## History 538 - 539 - - [ ] history views (again using groups ui, maybe plug that into an extension itself?) 540 - 541 - History (depends on ui primitives) 542 - - [ ] history viewer 543 - - [ ] history search 544 - - [ ] Infinite lossless personal encrypted archive of web history 545 - 546 642 ## Publishing, Provenance, Remote Extensions 547 643 644 + misc ideas 548 645 - [ ] share system 549 646 - [ ] poke at remote loading + provenance 550 647 - [ ] publish pages/apps? 551 - - [ ] local publishing w/ Helia or something like this 648 + 649 + experiment: helia 650 + - [ ] local publishing, eg use editor to write a blog post, hit publish… and share (handwave) 552 651 553 652 ## Minimum viable web workbench 554 653 ··· 566 665 - [ ] Devtools command to open devtools for a specific extension or window 567 666 - [ ] Fix `api.extensions.devtools()` - currently not working for consolidated extensions 568 667 569 - ## Later 668 + ## Storage 570 669 571 - storage backends 572 670 - [ ] try DuckDB as datastore storage backend instead of SQLite 671 + 672 + 673 + ## Parking lot 573 674 574 675 - [ ] Identities system 575 676 - [ ] Contacts integration
+1 -1
schema/generated/sqlite-full.sql
··· 1 1 -- Generated by schema/codegen.js 2 2 -- Schema version: 1 3 - -- Generated: 2026-02-04T15:56:41.699Z 3 + -- Generated: 2026-02-04T16:01:13.308Z 4 4 -- DO NOT EDIT - regenerate with: yarn schema:codegen 5 5 6 6 -- Unified content storage - URLs, text notes, tagsets, and images
+1 -1
schema/generated/sqlite-sync.sql
··· 1 1 -- Generated by schema/codegen.js 2 2 -- Schema version: 1 3 - -- Generated: 2026-02-04T15:56:41.700Z 3 + -- Generated: 2026-02-04T16:01:13.309Z 4 4 -- DO NOT EDIT - regenerate with: yarn schema:codegen 5 5 6 6 -- Unified content storage - URLs, text notes, tagsets, and images
+1 -1
schema/generated/types.rs
··· 1 1 // Generated by schema/codegen.js 2 2 // Schema version: 1 3 - // Generated: 2026-02-04T15:56:41.700Z 3 + // Generated: 2026-02-04T16:01:13.310Z 4 4 // DO NOT EDIT - regenerate with: yarn schema:codegen 5 5 6 6 use serde::{Deserialize, Serialize};
+1 -1
schema/generated/types.ts
··· 1 1 /** 2 2 * Generated by schema/codegen.js 3 3 * Schema version: 1 4 - * Generated: 2026-02-04T15:56:41.700Z 4 + * Generated: 2026-02-04T16:01:13.310Z 5 5 * DO NOT EDIT - regenerate with: yarn schema:codegen 6 6 */ 7 7