Skip to content

Commit

Permalink
peak peek, downhill from here
Browse files Browse the repository at this point in the history
  • Loading branch information
autonome committed Apr 3, 2023
1 parent be91b74 commit 0de6280
Show file tree
Hide file tree
Showing 53 changed files with 1,281 additions and 22 deletions.
85 changes: 63 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,81 @@
# Peek

![peek logo of eyeball peeking up from bottom](https://raw.githubusercontent.com/autonome/Peek/master/icons/banner.png)
Please meet Peek, a web user agent application designed for using the web where, when and how you want it.

Quickly peek at your favorite web pages without breaking your flow.
** WARNING**
* Peek is not a web browser! There are no tabs, and no windows in the browser sense of them. If that's what you're looking for, there are a few decent browsers for you to choose from.
* Peek is not safe for general use yet! It is a crude proof of concept I whipped up while on vacation. While I have thoughts on security model and user interface, I have not written it up into a proper security model yet.

Peek lets you choose 10 web pages to open with a keyboard shortcut, without opening a new tab, and able to close with the `escape` key.
## Features

I use this for:
You can use Peek in three ways, with more coming:

* Translating text
* See my Github notifications
* Calendar schedule
* Check email periodically instead of having it open all the time
* Stock or cryptocurrency prices
* Slack instances I don't want loaded all the time
* Check the weather
* Peeks - Keyboard activated modal chromeless web pages mapped to `Opt+0-9`
* Slides - Gesture activated modal chromeless web pages which slide in from left/right/bottom/top
* Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes

## Usage
### Peeks

* Create up to 10 bookmarks with "peek#" plus the number 0-9 in the title. Eg "My favorite website peek#1".
Peeks are keyboard activated modal chromeless web pages mapped to `Opt+0-9` and closed on blur, the `Escape` key or `cmd/ctrl+w`.

* Use the keyboard shortcut `alt+shift` plus the number you put in the bookmark title to peek at that URL.
### Slides

* A new minimal window will open with your chosen URL loaded.
Slides are gesture activated modal chromeless web pages which slide in from left/right/bottom/top, and closed on blur, the `Escape` key or `cmd/ctrl+w`.

* Hit the `escape` key to close the window.
### Scripts

(If no bookmark is configured for an index, Peek will just load about:home.)
Scripts periodically load a web page in the background and extract data matching a CSS selector, stores it, and notify the user when the resulting data changes.

## TODO
Ok, so not really "scripts" yet. But safe and effective enough for now.

* ESC doesn't work sometimes
## Why

* test on windows/linux
Some thoughts driving the design of Peek:

* fix window to have a maximum size
* Web user agents should be bounded by the user, not browser vendor business models
* 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
* Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions

* add feature to long-press links to peek (in pb mode?)
# Architecture / Implementation

Peek is designed to be modular and configurable around the idea that parts of it can run in different environments.

For example:
* Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts
* I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data
* Want cloud storage for all config and data, esp infinite history, so can do fun things with it

## Desktop App

Proof of concept is Electron. By far the best option today for cross-platform desktop apps which need a web rendering engine. There's really nothing else remotely suited (yet).

The user interface is just Tweakpane panels and modal chromeless web pages rn.

TODO
* Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support.
* Min browser might be interesting as a forkable base to work from and contribute to, if they're open to it. At least, should look more at the architecture.

## Mobile

TBD

## Cloud

* Going full crypto payments for distributed compute on this one.

## Future

* GCLI - not just a command bar, but like the Ubiquity extension
* Lossless personal encrypted archive of web history
* Implement the Firefox "awesomebar" scoring and search algorithm so that Peek *learns* you
* Extension model designed for web user agent user interface experimentation
* Panorama

## History

Peek was a browser extension that let you quickly peek at your favorite web pages without breaking your flow - loading pages mapped to keyboard shortcuts into a modal window with no controls, closable via the `Escape` key.

However, as browser extension APIs become increasingly limited, it was not possible to create a decent user experience and I abandoned it. You can access the extension in this repo [in the extension directory](/autonome/peek/extension/).

The only way to create the ideal user experience for a web user agent that *Does What I Want* is to make it a browser-ish application, and that's what Peek is now.

Binary file added assets/appicon.icns
Binary file not shown.
128 changes: 128 additions & 0 deletions assets/icons/AppIcon.appiconset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
{
"images":[
{
"idiom":"iphone",
"size":"20x20",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"20x20",
"scale":"3x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"1x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"3x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"3x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"3x",
"filename":"[email protected]"
},
{
"idiom":"iphone",
"size":"76x76",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"1x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"1x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"1x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"1x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"2x",
"filename":"[email protected]"
},
{
"idiom":"ipad",
"size":"83.5x83.5",
"scale":"2x",
"filename":"[email protected]"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"scale" : "1x",
"filename" : "[email protected]"
}
],
"info":{
"version":1,
"author":"makeappicon"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions assets/icons/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## iTunesArtwork & iTunesArtwork@2x (App Icon) file extension:

PNG extension is prepended to these two files -

While Apple suggested to omit the extension for these files,
the '.png' extension is actually required for iTunesConnect submission.

This is done for you so you don't have to.

However, for Ad_hoc or Enterprise distirbution, the extension should be removed
from the files before adding to XCode to avoid error.

refs: https://developer.apple.com/library/ios/qa/qa1686/_index.html

## iTunesArtwork & iTunesArtwork@2x (App Icon) transparency handling:

As images with alpha channels or transparencies cannot be set as an application's icon on
iTunesConnect, all transparent pixels in your images will be converted into
solid blacks.

To achieve the best result, you're advised to adjust the transparency settings
in your source files before converting them with makeAppIcon.

refs: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/AppIcons.html
Binary file added assets/icons/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/icons/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/icons/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const Store = require('electron-store');

const store = new Store();
store.clear();

store.set('prefs', {
globalKeyCmd: 'CommandOrControl+Escape',
peekKeyPrefix: 'Option+'
});

store.set('peeks', [
]);

store.set('scripts', [
]);

module.exports = store;
8 changes: 8 additions & 0 deletions content-main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
console.log('content-main');

setTimeout(() => {
const s = "selector: '.percent > span:nth-child(2)";
const r = document.querySelector(s);
const value = r ? r.textContent : null;
console.log('cs val', value;
}, 1000);
Loading

0 comments on commit 0de6280

Please sign in to comment.