diff --git a/docs/discoverability.md b/docs/discoverability.md new file mode 100644 index 0000000..66e8df4 --- /dev/null +++ b/docs/discoverability.md @@ -0,0 +1,30 @@ +How can an end user discover and install an extension? + +Let’s explore different options. + +##Serendipity + +Extensions can be installed via a universal link that can be embedded in a QR code. So it can be as simple as finding a link or a QR code in the wild. + +## Browsing a DApp + +Extensions references can be added via a status specific API. When browsing a DApp user could be informed that some extensions can be installed. See https://github.com/estebanmino/EIPs/blob/master/EIPS/eip-747.md 1 + +## Status discovery + +Status discovery might relay users extensions. Extensions would then be available via the discovery UI. + +## Joining a chat + +A list of extensions could be associated to a chat. Once joining, a user would then be proposed to install those extensions to have a better experience. Those extensions would only be active in that specific chat. +Private groups admin could manage this list of extensions. + +How can we have extensions associated to public chats? + +## Chat command recipient call to action + +A chat command might be sent to a recipient who didn’t install the extension. It should be trivial for them to install the extension. + +## ENS username + +Some well know key/value pair associated to a ENS username name could point to a set of extensions. Those extensions could be used during account creation/restoration. \ No newline at end of file diff --git a/docs/editor.md b/docs/editor.md new file mode 100644 index 0000000..9231ef3 --- /dev/null +++ b/docs/editor.md @@ -0,0 +1,105 @@ +# Extension editor + +Extension editor is the one tool used to create and permissionlessly publish an extension. +As extension do not rely on existing languages or frameworks barrier to entry is significant. + +The following points are considered to improve the developer experience: +- guidance to initiate an extension +- cues to easily build bit by bit +- feedback to make sure it will work as expected + +## From zero to hero + +Add more examples, templates and one click option to create an extension skeleton. + +## A feature complete editor + +Improve the editor basic features to match common expectations. + +### Never loose work + +It should not be possible to loose the result of a work session. +Indivual extensions are saved locally. All extensions ever edited can be retrieved via a workspace style panel. + +### Improve syntax navigation + +Matching parens and nesting level are visualized using colors. +Easily identify when a block syntax is correct. + +### Semantic highlighting + +Semantic highlighting: each variable is identifyed by a unique color (https://medium.com/@evnbr/coding-in-color-3a6db2743a1e) +References (events, views) are colored and can be navigated. + +### Documentation + +Completion and easy doc access is provided for all supported primitives. + +### Navigation + +A reference can be navigated on user clicks. A query can be listened to (data show inline) (LightTable watch https://www.youtube.com/watch?v=d8-b6QEN-rk) +An event can be triggered with user provided data. +Destructuring is facilitated. + +## Prevent creation of invalid extension + +The editor is not a regular text editor. Users can't randomly edit extension, making it mostly read-only. +Changes can only be introduced semantically, via custom actions. +New pimitives can only be added via a custom editor action. Primitives children can be added. Text element and properties can be edited. +Renaming a custom primitive will rename all its usages. + +### Resources + +https://www.timmclean.net/json-editor/ +https://github.com/projectional-haskell/structured-haskell-mode +https://www.greenfoot.org/frames/ +https://www.jetbrains.com/mps/ +http://concrete-editor.org/ + +# Further improvments + +## Time navigation + +Triple time axis (navigation) +git history +data changes (query changes, track events) +extension changes (visual undo https://www.youtube.com/watch?v=UDTSyWA31XI https://vimsical.com) +Time travelling + +## Illiterate programming + +# Resources + +- https://harc.ycr.org/project/ +- https://fr.wikipedia.org/wiki/Dynabook +- https://history-computer.com/ModernComputer/Personal/Dynabook.html +- https://github.com/reduxjs/redux-devtools +- http://lighttable.com/archive/ +- https://github.com/darwin/plastic +- https://harc.ycr.org/project/ +- http://cirru.org/ +- https://mkremins.github.io/riffle/ +- https://glitch.com/culture/an-intro-to-webvr/ +- https://github.com/mkremins/flense +- https://developer.apple.com/xcode/interface-builder/ +- https://vimeo.com/62618532 +- https://www.youtube.com/watch?v=dl0CbKYUFTY +- https://www.levenez.com/NeXTSTEP/ +- http://unisonweb.org/posts/ +- https://groups.google.com/forum/#!forum/augmented-programming +- https://blog.isomorf.io/ +- http://witheve.com/ https://github.com/witheve/Eve https://github.com/witheve/eve-experiments +- https://observablehq.com/@jashkenas/against-the-current-what-we-learned-from-eve-transcript +- https://github.com/witheve/eve-native/blob/master/examples/counter.eve +- http://play.witheve.com/#/examples/editor.eve +- http://play.witheve.com/#/examples/CRM.eve +- http://incidentalcomplexity.com/ +- http://mech-lang.org/ https://github.com/mech-lang/mech/blob/master/examples/tutorial.mec +- https://github.com/mech-lang/mech +- https://github.com/mozilla/mentat +- https://dynamicland.org/ +- http://incidentalcomplexity.com/ +- https://lively-next.org/ +- https://observablehq.com/ +- https://glitch.com/ +- https://observablehq.com/@jashkenas/against-the-current-what-we-learned-from-eve-transcript \ No newline at end of file diff --git a/docs/ideas.md b/docs/ideas.md new file mode 100644 index 0000000..186e617 --- /dev/null +++ b/docs/ideas.md @@ -0,0 +1,62 @@ +## Easy token onboarding + +https://medium.com/connext/introducing-the-dai-card-fc46520078d3 +https://media.consensys.net/introducing-streaming-payments-for-ujo-with-connext-payment-channels-and-dai-16725929fe38 +https://daicard.io/redeem?secret=0x66091135e3c54d1d02bf28cd754bb2c209fc0895dc5f47bad5fa43a1a2923d78&amountToken=1000000000000000000&amountWei=0 +https://cash.cryptostaw.com/ (https://medium.com/matic-network/tackling-the-adoption-issue-one-dapp-at-a-time-e756fbabfea0) +https://qrtoken.io +https://medium.com/linkdrop-protocol/introducing-linkdrop-protocol-f612ae181e31 +https://twitter.com/rampnetwork/status/1113441698938589185 (buy using a credit card) + +## Other exchange integration + +Similar to the Kyber extension + +https://uniswap.io/ +https://twitter.com/uniswapexchange/status/1104658818741477376 +https://0x.org/instant + +## Price oracle + +https://medium.com/@mykelp/introducing-polaris-ced195dd798e (based on Uniswap) + +## Easy interface to provide liquidity + +https://compound.finance/ +https://bzx.network/ +https://uniswap.io/ +https://makerdao.com/en/ +xDai integration +aka Burner wallet + +xdai.io +https://twitter.com/uegabs/status/1103011155679870976 + +## Voting DApp extension + +MakerDAO CDP UI +0x integration ideas +https://blog.0xproject.com/22-ideas-to-explore-with-0x-4d551c10dd4e +https://blog.0xproject.com/0x-extensions-enabling-new-types-of-exchange-1db0bf6125b6 + +## Bloom integration (credit) + +bloom.co +https://bloom.co/blog/introducing-bloom-starter/ +https://bloom.co/blog/built-on-bloom-doxa-uses-bloom-to-build-more-efficient-lottery-system +Discover local groups based on location +https://www.foam.space/ + +## Lend money + +http://trustlines.network/ (from your contacts) +https://nuo.network/ +https://dharma.io/ +https://twitter.com/kermankohli/status/1103571081573486592 +https://twitter.com/joemccann/status/1103413202052833280 +https://dharmalytics.io/ +https://medium.com/marbleorg/introducing-marble-a-smart-contract-bank-c9c438a12890 + +## Secure file exchange + +https://blog.datafund.net/fairdrop-secure-private-unstoppable-file-transfer-for-the-free-world-f1a39adbdeab \ No newline at end of file diff --git a/docs/integration.md b/docs/integration.md new file mode 100644 index 0000000..4128846 --- /dev/null +++ b/docs/integration.md @@ -0,0 +1,21 @@ +`stateofus.eth` allows anyone to associate an address to a logical name. +On top of that, extra meta information can be stored using the `text` dictionary. +This capacity can be used to link extensions to a name and leveraged by status in various ways. + +# An extension can be installed by name + +The `status.extension` property is associated to an ENS name. An extension can then easily be installed via its name e.g. `kyber`. +Once installed, the user is automatically notified of updates and can easily install them. +Older versions are still accessible and usable. + +# An account restoration triggers an extension activation + +An extension can be associated to a regular ENS name representing a user address via `status.account.extension`. +Upon restoration, this extension is triggered allowing to perform restorative actions (e.g. adding contacts, groups, DApps, tokens, ..) + +# A public channel with bells and whistles + +When opening a public channel for the first time, a ENS lookup is performed on this channel name. +The associated `status.channel.extension` is discovered and proposed for installation. + +e.g. Opening `#kyber` triggers a lookup on `kyber.stateofus.eth`. User is proposed to load associated `status.channel.extension`, if defined. This extension installs a `chat.command` in the `#kyber` channel and the kyber `wallet.settings` exchange. \ No newline at end of file