From a8882a4cea3923334e0c15f7b69ef69b41bd2f7e Mon Sep 17 00:00:00 2001 From: Mathijs de Bruin Date: Tue, 9 Oct 2018 21:55:54 +0100 Subject: [PATCH 01/19] Update ipfs-search URL, source URL and description --- data/apps.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/data/apps.yaml b/data/apps.yaml index 807ad6d..e239d6b 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -111,9 +111,12 @@ content: description: > Publish and render markdown essays to and from ipfs. - title: ipfs-search - website: http://ipfs-search.com + website: https://ipfs-search.com + source: https://github.com/ipfs-search/ipfs-search description: > - Search engine for files and directories on IPFS. + Searching the universe since 2016. + + Sniffs the DHT gossip and indexes file and directory hashes. Metadata and search API's available. - title: ipfs-share source: https://github.com/rameshvarun/ipfs-share description: > From e5557c593990a14c56f0a96a788bb4eeb50105b2 Mon Sep 17 00:00:00 2001 From: Mathijs de Bruin Date: Wed, 10 Oct 2018 10:30:11 +0100 Subject: [PATCH 02/19] Regenerated README. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c2a84ea..9cf732f 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,8 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [IPFS Event Drop](https://github.com/travisperson/ipfs-event-drops) - An app that allows for improved visualization of ipfs events. - [IPFS ID and Public Key QR Codes Demo](https://ipfs.io/ipfs/zdj7Whr8X3zah99TSuyPjENaERcBW9C7B36EaCb1DEZ5pbbL9/) - A demo app that uses windows.ipfs to show you a QR Code of your IPNS Link and of your Public Key. [Source](https://github.com/ipfs-shipyard/demo-ipfs-id-qr-codes) - [ipfs-md-wiki](https://github.com/daijiale/ipfs-md-wiki) - Build your wiki system base on ipfs and markdown. -- [ipfs-search](http://ipfs-search.com) - Search engine for files and directories on IPFS. +- [ipfs-search](https://ipfs-search.com) - Searching the universe since 2016. +Sniffs the DHT gossip and indexes file and directory hashes. Metadata and search API's available. [Source](https://github.com/ipfs-search/ipfs-search) - [ipfs-share](https://github.com/rameshvarun/ipfs-share) - Pastebin/Image host/File sharing application - [ipfs.ink](https://ipfs.ink) - Publish and render markdown essays to and from ipfs. [Source](https://github.com/kpcyrd/ipfs.ink) - [ipfs.pics](https://github.com/ipfspics/ipfspics-server) - Upload and share pics. From 8fc0dd2508e40f1e19c382b9be385eb6f4c24b68 Mon Sep 17 00:00:00 2001 From: Mark Henderson Date: Fri, 30 Nov 2018 18:24:21 -0500 Subject: [PATCH 03/19] Fixing TallyLab typo --- README.md | 2 +- data/apps.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c909bed..f88ea69 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [PubSub Chat Demo](https://ipfs.io/ipfs/QmWZ3u5S7RjFXKfW6dSZhj7CozcvpqJxm48RYMmKkWcmNQ/) - A ~76KB demo chat app that uses window.ipfs, provided by the IPFS Companion web extension [Source](https://github.com/tableflip/ipfs-pubsub-chat-example) - [PushToTalk](http://timothy.hobbs.cz/push-to-talk/index.html) - Push to Talk lets you edit audio essays and publish them with IPFS. - [qri](https://qri.io) - Dataset creation, collaboration, and discovery on the distributed web. [Source](https://github.com/qri-io/qri) -- [TallyLab](https://tallylab.com/) - Local-first, end-to-end encrypted diary app for capturing, analyzing, and sharing data about any and - title: Temporal +- [TallyLab](https://tallylab.com/) - Local-first, end-to-end encrypted data diary app for capturing, analyzing, and sharing data about any and everything. - [Temporal](https://github.com/RTradeLtd/Temporal) - Temporal is an easy to use API and platform for integrating IPFS and other distributed/decentralized storage technologies into enterprise applications - [Textile Photos](https://www.textile.photos) - Textile Photos is a secure, mobile digital wallet for your photos. [Source](https://github.com/textileio/textile-mobile) - [ToDo List Demo](https://ipfs.io/ipfs/QmfFaH6dGibQ5JwEdsujeHBzsmHUsFRB5kU9P8nzPyzMv2/) - A ToDo List demo app that uses windows.ipfs. [Source](https://github.com/ipfs-shipyard/demo-ipfs-todo) diff --git a/data/apps.yaml b/data/apps.yaml index a8405aa..83dc32b 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -216,7 +216,7 @@ content: website: https://tallylab.com/ picture: /images/tallylab.jpg description: > - Local-first, end-to-end encrypted diary app for capturing, analyzing, and sharing data about any and - title: Temporal + Local-first, end-to-end encrypted data diary app for capturing, analyzing, and sharing data about any and everything. - title: Temporal source: https://github.com/RTradeLtd/Temporal description: > @@ -294,4 +294,4 @@ content: description: > Run your IPFS node on your machine without having to bother with command line tools. Manage your node, add your files, easily change the settings... everything from - just one interface. \ No newline at end of file + just one interface. From 20212e2926bf7a42ddac08e9fbe90a1901beead5 Mon Sep 17 00:00:00 2001 From: Haz Date: Thu, 20 Dec 2018 23:03:50 +0100 Subject: [PATCH 04/19] Added "Sweet IPFS" to tools.yaml --- data/tools.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/tools.yaml b/data/tools.yaml index df16037..4b76e4a 100644 --- a/data/tools.yaml +++ b/data/tools.yaml @@ -3,6 +3,9 @@ color: yellow icon: stroke_code description: Tools built on the top of IPFS. content: +- title: Sweet IPFS + source: https://github.com/RHazDev/Sweet-IPFS + description: Full node for Android - title: cachewarmer source: https://github.com/BrendanBenshoof/cachewarmer description: Donate ipfs gateways to cache other people's content From 08d0160e7838ac403e61dad345928fbe9fb25799 Mon Sep 17 00:00:00 2001 From: Haz Date: Thu, 20 Dec 2018 23:06:07 +0100 Subject: [PATCH 05/19] Built README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3cd1ced..f3547e5 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - 2017-08-21: [Understanding the IPFS White Paper part 2](https://decentralized.blog/understanding-the-ipfs-white-paper-part-2.html) - 2017-08-10: [Understanding the IPFS White Paper part 1](https://decentralized.blog/understanding-the-ipfs-white-paper-part-1.html) - 2017-06-13: [Decentralized & Distributed Edge Computing Comes to Computes.io](https://blog.computes.io/decentralized-distributed-edge-computing-comes-to-computes-io-396aa062bc85) +- [Downloading nodejs versions with nvm/n over IPFS](https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc) - 2017-05-05: [Decentralized indexes for public genomic data](https://github.com/luizirber/2017-recomb) - 2017-03-31: [Using IPFS for IoT Communications](https://medium.com/@chrismatthieu/using-ipfs-for-iot-communications-b49c2139783a) - 2016-09-12: [IPFS: The Internet Democratised](https://medium.com/@tonywillenberg/web-3-0-a-truly-democratised-internet-f4b06cb4077b) @@ -112,7 +113,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - 2015-09-13: [Introduction to IPFS](http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example) - 2015-09-10: [First Steps Toward Implementing Distributed Permanent Web With IPFS](https://hacked.com/first-steps-toward-implementing-distributed-permanent-web-ipfs/) - 2015-09-08: [HTTP is obsolete. It's time for the distributed, permanent web](https://ipfs.io/ipfs/QmNhFJjGcMPqpuYfxL62VVB9528NXqDNMFXiqN5bgFYiZ1/its-time-for-the-permanent-web.html) -- [Downloading nodejs versions with nvm/n over IPFS](https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc) ## Datasets @@ -153,6 +153,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [ipscend](https://github.com/diasdavid/ipscend) - Tool for hosting web apps and static websites in IPFS - [pinbot](https://github.com/whyrusleeping/pinbot) - Pin content via IRC - [Siderus Orion](https://orion.siderus.io) - Easy to use IPFS desktop client for macOS, Windows and Linux [Source](https://github.com/Siderus/Orion) +- [Sweet IPFS](https://github.com/RHazDev/Sweet-IPFS) - Full node for Android ## Videos From cdaaed38bf7e838513e6436eb2233d62a2bcaa00 Mon Sep 17 00:00:00 2001 From: Ben Stahl Date: Thu, 10 Jan 2019 07:31:00 +0100 Subject: [PATCH 06/19] Fix broken Partyshare link --- README.md | 2 +- data/apps.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3cd1ced..f507ae9 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [OpenBazaar](https://www.openbazaar.org/) - This new version(v2.0) is built on IPFS, Openbazaar stores can now be accessible to buyers even when they are offline. - [Orbit](https://orbit.chat) - Distributed, peer-to-peer chat application on IPFS. [Source](https://github.com/haadcode/orbit) - [Origin Protocol](https://demo.originprotocol.com/) - Distributed sharing economy marketplace with images, metadata, and ERC 725 data stored on IPFS. [Source](https://github.com/OriginProtocol/demo-dapp) -- [Partyshare](https://partysha.re) - A simple file sharing app. +- [Partyshare](https://busterlabs.github.io/Partyshare) - A simple file sharing app. - [Pathephone](https://pathephone.github.io) - Distributed music streaming app. - [Peer Bandwidth Demo](https://ipfs.io/ipfs/QmVaVXbLdw4R5NqAiiQoTWtitxo5g7FS31PQmCLbH9p8Fu/) - An demo app that uses window.ipfs, provided by the IPFS Companion web extension to get and graph bandwidth info for your IPFS node [Source](https://github.com/tableflip/ipfs-peer-bw-example) - [Peer Map Demo](https://ipfs.io/ipfs/QmRPGCmLKH2dQmNiPRsiuYS9EhhJL1Gmkz5F75gKY1K4Bm/) - A map of IPv4 IPFS peers that uses window.ipfs [Source](https://github.com/tableflip/ipfs-peer-map-example) diff --git a/data/apps.yaml b/data/apps.yaml index 863e721..3fb7b1d 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -147,7 +147,7 @@ content: description: > Distributed, peer-to-peer chat application on IPFS. - title: Partyshare - website: https://partysha.re + website: https://busterlabs.github.io/Partyshare description: > A simple file sharing app. - title: FileNation From 26af842ca8ca98c21a99a9ef438bd9100dc4227a Mon Sep 17 00:00:00 2001 From: Ben Stahl Date: Thu, 10 Jan 2019 07:33:04 +0100 Subject: [PATCH 07/19] Update description --- README.md | 2 +- data/apps.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f507ae9..a3b3624 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [OpenBazaar](https://www.openbazaar.org/) - This new version(v2.0) is built on IPFS, Openbazaar stores can now be accessible to buyers even when they are offline. - [Orbit](https://orbit.chat) - Distributed, peer-to-peer chat application on IPFS. [Source](https://github.com/haadcode/orbit) - [Origin Protocol](https://demo.originprotocol.com/) - Distributed sharing economy marketplace with images, metadata, and ERC 725 data stored on IPFS. [Source](https://github.com/OriginProtocol/demo-dapp) -- [Partyshare](https://busterlabs.github.io/Partyshare) - A simple file sharing app. +- [Partyshare](https://busterlabs.github.io/Partyshare) - A simple file sharing desktop app. - [Pathephone](https://pathephone.github.io) - Distributed music streaming app. - [Peer Bandwidth Demo](https://ipfs.io/ipfs/QmVaVXbLdw4R5NqAiiQoTWtitxo5g7FS31PQmCLbH9p8Fu/) - An demo app that uses window.ipfs, provided by the IPFS Companion web extension to get and graph bandwidth info for your IPFS node [Source](https://github.com/tableflip/ipfs-peer-bw-example) - [Peer Map Demo](https://ipfs.io/ipfs/QmRPGCmLKH2dQmNiPRsiuYS9EhhJL1Gmkz5F75gKY1K4Bm/) - A map of IPv4 IPFS peers that uses window.ipfs [Source](https://github.com/tableflip/ipfs-peer-map-example) diff --git a/data/apps.yaml b/data/apps.yaml index 3fb7b1d..1b487e6 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -149,7 +149,7 @@ content: - title: Partyshare website: https://busterlabs.github.io/Partyshare description: > - A simple file sharing app. + A simple file sharing desktop app. - title: FileNation website: https://filenation.io/ description: > From 538626d700eb605111e1c05548636c3ec07fe2d2 Mon Sep 17 00:00:00 2001 From: Ben Stahl Date: Thu, 10 Jan 2019 07:40:27 +0100 Subject: [PATCH 08/19] Add new metadata fields for Partyshare --- data/apps.yaml | 2 ++ src/static/images/Partyshare_Logo.png | Bin 0 -> 18111 bytes 2 files changed, 2 insertions(+) create mode 100644 src/static/images/Partyshare_Logo.png diff --git a/data/apps.yaml b/data/apps.yaml index 1b487e6..f70e732 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -148,6 +148,8 @@ content: Distributed, peer-to-peer chat application on IPFS. - title: Partyshare website: https://busterlabs.github.io/Partyshare + source: https://github.com/BusterLabs/Partyshare + picture: /images/Partyshare_Logo.png description: > A simple file sharing desktop app. - title: FileNation diff --git a/src/static/images/Partyshare_Logo.png b/src/static/images/Partyshare_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea59c4e3a8e8194b092f429e5e3cdf72a47aa9c GIT binary patch literal 18111 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 ep_|ypj{Sc`PVY-)GpCLK0000 Date: Thu, 10 Jan 2019 07:41:41 +0100 Subject: [PATCH 09/19] Result of build script --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a3b3624..3312cc5 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [OpenBazaar](https://www.openbazaar.org/) - This new version(v2.0) is built on IPFS, Openbazaar stores can now be accessible to buyers even when they are offline. - [Orbit](https://orbit.chat) - Distributed, peer-to-peer chat application on IPFS. [Source](https://github.com/haadcode/orbit) - [Origin Protocol](https://demo.originprotocol.com/) - Distributed sharing economy marketplace with images, metadata, and ERC 725 data stored on IPFS. [Source](https://github.com/OriginProtocol/demo-dapp) -- [Partyshare](https://busterlabs.github.io/Partyshare) - A simple file sharing desktop app. +- [Partyshare](https://busterlabs.github.io/Partyshare) - A simple file sharing desktop app. [Source](https://github.com/BusterLabs/Partyshare) - [Pathephone](https://pathephone.github.io) - Distributed music streaming app. - [Peer Bandwidth Demo](https://ipfs.io/ipfs/QmVaVXbLdw4R5NqAiiQoTWtitxo5g7FS31PQmCLbH9p8Fu/) - An demo app that uses window.ipfs, provided by the IPFS Companion web extension to get and graph bandwidth info for your IPFS node [Source](https://github.com/tableflip/ipfs-peer-bw-example) - [Peer Map Demo](https://ipfs.io/ipfs/QmRPGCmLKH2dQmNiPRsiuYS9EhhJL1Gmkz5F75gKY1K4Bm/) - A map of IPv4 IPFS peers that uses window.ipfs [Source](https://github.com/tableflip/ipfs-peer-map-example) From 57191b80db7401b1cbdb2467c909b6f48ab35834 Mon Sep 17 00:00:00 2001 From: Javi Date: Mon, 1 Apr 2019 02:05:56 +0200 Subject: [PATCH 10/19] Add tool to check public gateways states (#242) --- README.md | 1 + data/tools.yaml | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 616c882..22d0468 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [IPRedirect](https://github.com/JayBrown/IPRedirect) - Browser userscript for redirecting IPFS/IPNS addresses to your local gateway. This should work on any browser that hasn't had an extension written for it yet and has support for userscripts. - [ipscend](https://github.com/diasdavid/ipscend) - Tool for hosting web apps and static websites in IPFS - [pinbot](https://github.com/whyrusleeping/pinbot) - Pin content via IRC +- [Public gateway status checker](https://ipfs.fooock.com/) - Web app to check public states of IPFS gateways, including latency and gateway writable state. [Source](https://github.com/fooock/ipfs-gateway-checker) - [Siderus Orion](https://orion.siderus.io) - Easy to use IPFS desktop client for macOS, Windows and Linux [Source](https://github.com/Siderus/Orion) ## Videos diff --git a/data/tools.yaml b/data/tools.yaml index df16037..12d2c86 100644 --- a/data/tools.yaml +++ b/data/tools.yaml @@ -98,3 +98,7 @@ content: source: https://github.com/arsyun/ipfs-common description: > some common tools, 1.CID to human readable cid, 2.cid and block name convert, 3. read the leveldb tools. +- title: Public gateway status checker + website: https://ipfs.fooock.com/ + source: https://github.com/fooock/ipfs-gateway-checker + description: Web app to check public states of IPFS gateways, including latency and gateway writable state. From 225e574fbfd4a54702edc066b1be568341c1dbac Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 29 Apr 2019 21:51:54 +0100 Subject: [PATCH 11/19] feat: update xkcd archive (#243) License: MIT Signed-off-by: Henrique Dias --- README.md | 4 ++-- data/datasets.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 22d0468..4b717a2 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - 2017-08-21: [Understanding the IPFS White Paper part 2](https://decentralized.blog/understanding-the-ipfs-white-paper-part-2.html) - 2017-08-10: [Understanding the IPFS White Paper part 1](https://decentralized.blog/understanding-the-ipfs-white-paper-part-1.html) - 2017-06-13: [Decentralized & Distributed Edge Computing Comes to Computes.io](https://blog.computes.io/decentralized-distributed-edge-computing-comes-to-computes-io-396aa062bc85) -- [Downloading nodejs versions with nvm/n over IPFS](https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc) - 2017-05-05: [Decentralized indexes for public genomic data](https://github.com/luizirber/2017-recomb) - 2017-03-31: [Using IPFS for IoT Communications](https://medium.com/@chrismatthieu/using-ipfs-for-iot-communications-b49c2139783a) - 2016-09-12: [IPFS: The Internet Democratised](https://medium.com/@tonywillenberg/web-3-0-a-truly-democratised-internet-f4b06cb4077b) @@ -114,6 +113,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - 2015-09-13: [Introduction to IPFS](http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example) - 2015-09-10: [First Steps Toward Implementing Distributed Permanent Web With IPFS](https://hacked.com/first-steps-toward-implementing-distributed-permanent-web-ipfs/) - 2015-09-08: [HTTP is obsolete. It's time for the distributed, permanent web](https://ipfs.io/ipfs/QmNhFJjGcMPqpuYfxL62VVB9528NXqDNMFXiqN5bgFYiZ1/its-time-for-the-permanent-web.html) +- [Downloading nodejs versions with nvm/n over IPFS](https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc) ## Datasets @@ -123,7 +123,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [Old Internet Files](https://ipfs.io/ipfs/QmbsZEvJE8EU51HCUHQg2aem9JNFmFHdva3tGVYutdCXHp) [Source](https://github.com/ipfs/archives/issues/176) - [Presidental Daily Briefs](https://ipfs.io/ipfs/Qme6epvZDj3vzHcFKdF1nZhbixjw8Bn4imGcKnbUyBJL89) [Source](https://github.com/ipfs/archives/issues/23) - [World Wide Web History Project](https://ipfs.io/ipfs/QmRTSA1UFHSx3z7taNRwUVM8AjB2EQwKvyZu3BfJg9QRtZ) [Source](https://github.com/ipfs/archives/issues/159) -- [XKCD](https://ipfs.io/ipfs/Qmb8wsGZNXt5VXZh1pEmYynjB6Euqpq3HYyeAdw2vScTkQ) [Source](https://github.com/ipfs/archives/issues/21) +- [XKCD](https://ipfs.io/ipns/xkcd.hacdias.com) [Source](https://github.com/ipfs/archives/issues/21) - [yarchive.net](https://ipfs.io/ipfs/QmdA5WkDNALetBn4iFeSepHjdLGJdxPBwZyY47ir1bZGAK) [Source](https://github.com/ipfs/archives/issues/76) ## Tools diff --git a/data/datasets.yml b/data/datasets.yml index 5f2c775..cd1e134 100644 --- a/data/datasets.yml +++ b/data/datasets.yml @@ -15,11 +15,11 @@ content: description: size: 480MB - title: XKCD - hash: /ipfs/Qmb8wsGZNXt5VXZh1pEmYynjB6Euqpq3HYyeAdw2vScTkQ - website: https://ipfs.io/ipfs/Qmb8wsGZNXt5VXZh1pEmYynjB6Euqpq3HYyeAdw2vScTkQ + hash: /ipns/xkcd.hacdias.com + website: https://ipfs.io/ipns/xkcd.hacdias.com source: https://github.com/ipfs/archives/issues/21 description: - size: 122MB + size: 241MB - title: Old Internet Files hash: /ipfs/QmbsZEvJE8EU51HCUHQg2aem9JNFmFHdva3tGVYutdCXHp website: https://ipfs.io/ipfs/QmbsZEvJE8EU51HCUHQg2aem9JNFmFHdva3tGVYutdCXHp From b4cb8c2ccd1ed8c48e5e8cea67c68a22174ee62f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 30 Apr 2019 09:43:17 +0100 Subject: [PATCH 12/19] fix: remove non-existing (#245) * fix: remove non-existing License: MIT Signed-off-by: Henrique Dias * fix: remove failing demo License: MIT Signed-off-by: Henrique Dias --- README.md | 9 ++------- data/apps.yaml | 13 ------------- data/articles.yaml | 3 --- data/datasets.yml | 6 ------ data/tools.yaml | 2 +- 5 files changed, 3 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 4b717a2..3fc47b3 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [akasha](http://akasha.world/) - A Next-Generation Social Media Network, powered by Ethereum and embedded into IPFS. - [Alexandria](http://www.alexandria.io/learn/#integrated-technologies) - Decentralized content publishing / monetization platform. - [Arbore](http://arbo.re) - A friend-to-friend file-sharing app build on top of IPFS. -- [Arpadyne](https://arpadyne.computes.com) - The New Internet - DNS powered by OrbitDB. Content delivered via IPFS. - [Autonomica "IPFS Social Proof"](https://github.com/IBM/ipfs-social-proof) - Autonomica is a Keybase-like Dapp for creating an identity and proving this identity via published social media and web proofs. - [beets](https://github.com/beetbox/beets) - Beets has a plugin which allows for easy sharing of music libraries using IPFS - [Blokaly](https://github.com/blokaly) - A badge issuing, sharing and display platform based on IPFS. @@ -49,11 +48,10 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [dtube](https://d.tube) - Distributed video sharing with steem.it intergrations, using ipfs for backend storage. - [enzypt.io](https://enzypt.io/) - A website to buy and sell files through Ethereum and IPFS. [Source](https://github.com/flex-dapps/enzypt) - [Ethlance](http://ethlance.com) - First completely decentralised job market platform built on Ethereum and IPFS. [Source](https://github.com/madvas/ethlance) -- [FileNation](https://filenation.io/) - The simplest way to send your files around the world using IPFS. - [git-ipfs-rehost](https://github.com/whyrusleeping/git-ipfs-rehost) - A script to rehost your git repos in ipfs. - [Global Upload](https://globalupload.io/) - File transportation service for IPFS, upload files to the future of distributed web. - [gogo.tattoo](http://gogo.tattoo) - Gogo Tattoo Project uses IPFS, DLTs and other modern technologies to offer tattoo artists and wearers an unbreakable lifetime record of their portfolios. gogo.tattoo app already has a feature to share works directly to IPFS. -- [Gorilla REPL viewer](https://github.com/keorn/ipfs-gorilla-repl) - Gorilla is a rich REPL for Clojure in the notebook style. [Demo](https://ipfs.io/ipfs/QmRNUauWDvZFkAp1Bw3kAode3jT8aH2vx7LYzbS7H6R3Mg/view.html?path=/ipfs/QmbRdyLXiFWrKc5hW1NbvpUxF9tLovWCPgiz4BDhjD9k3j) +- [Gorilla REPL viewer](https://github.com/keorn/ipfs-gorilla-repl) - Gorilla is a rich REPL for Clojure in the notebook style. - [Hardbin](https://github.com/jes/hardbin) - Hardbin is an encrypted pastebin, with the decryption key passed in the URL fragment - [hasteIPFS](https://ipfs.io/ipns/bin.ipfs.ovh/) - IPFS based code bin. (Read only for now) - [HydrusNetwork](https://github.com/hydrusnetwork/hydrus) - A booru-style media tagging application with a multitude of features, recently added basic ipfs support. @@ -71,7 +69,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [ipfs.ink](https://ipfs.ink) - Publish and render markdown essays to and from ipfs. [Source](https://github.com/kpcyrd/ipfs.ink) - [ipfs.pics](https://github.com/ipfspics/ipfspics-server) - Upload and share pics. - [IPFSBin](https://github.com/victorbjelkholm/ipfsbin) - Pastebin clone build. -- [IPFSStore](https://ipfsstore.it) - Pinning paid with Steem - [killcord](https://killcord.io/) - A censorship resistant deadman's switch [Source](https://github.com/nomasters/killcord) - [markup.rocks](https://ipfs.io/ipfs/QmWPgJnUGLB1LPh9KMG9LEN4LVu5e17TwkEtcmTWdNn9V6/#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u) - Pandoc-based markup editor/previewer/converter, ported to IPFS. [Source](https://github.com/davidar/markup.rocks) - [NodeFort.io](https://www.nodefort.io) - Web-based IPFS node hosting service. @@ -108,7 +105,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - 2017-03-31: [Using IPFS for IoT Communications](https://medium.com/@chrismatthieu/using-ipfs-for-iot-communications-b49c2139783a) - 2016-09-12: [IPFS: The Internet Democratised](https://medium.com/@tonywillenberg/web-3-0-a-truly-democratised-internet-f4b06cb4077b) - 2016-05-20: [Changelog Podcast](https://changelog.com/204/) -- 2015-11-01: [Eris + IPFS](https://monax.io/blog/2015/11/01/eris-and-ipfs/) - 2015-09-18: [The InterPlanetary File System Wants to Create a Permanent Web](http://motherboard.vice.com/read/the-interplanetary-file-system-wants-to-create-a-permanent-web) - 2015-09-13: [Introduction to IPFS](http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example) - 2015-09-10: [First Steps Toward Implementing Distributed Permanent Web With IPFS](https://hacked.com/first-steps-toward-implementing-distributed-permanent-web-ipfs/) @@ -121,7 +117,6 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [IETF RFC Archive](https://ipfs.io/ipfs/QmNvTjdqEPjZVWCvRWsFJA1vK7TTw1g9JP6we1WBJTRADM) [Source](https://github.com/ipfs/archives/issues/18) - [MDSConnect](https://ipfs.io/ipfs/QmcvfB6pAqUfTnuAK8zFKVxbdhopnBPveJrDcy1JAA7HX5) [Source](https://github.com/ipfs/archives/issues/152) - [Old Internet Files](https://ipfs.io/ipfs/QmbsZEvJE8EU51HCUHQg2aem9JNFmFHdva3tGVYutdCXHp) [Source](https://github.com/ipfs/archives/issues/176) -- [Presidental Daily Briefs](https://ipfs.io/ipfs/Qme6epvZDj3vzHcFKdF1nZhbixjw8Bn4imGcKnbUyBJL89) [Source](https://github.com/ipfs/archives/issues/23) - [World Wide Web History Project](https://ipfs.io/ipfs/QmRTSA1UFHSx3z7taNRwUVM8AjB2EQwKvyZu3BfJg9QRtZ) [Source](https://github.com/ipfs/archives/issues/159) - [XKCD](https://ipfs.io/ipns/xkcd.hacdias.com) [Source](https://github.com/ipfs/archives/issues/21) - [yarchive.net](https://ipfs.io/ipfs/QmdA5WkDNALetBn4iFeSepHjdLGJdxPBwZyY47ir1bZGAK) [Source](https://github.com/ipfs/archives/issues/76) @@ -130,7 +125,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [Blockwatch](https://ipfs.io/ipfs/QmdikpwcyeBuGaVzWzSzPuqvBfTGD8jPAVydcCjYHsBUxo/index.html) - Monitor the current block number of the Ethereum blockchain, and set alerts (stored locally using PouchDB in your browser) for when certain block heights are passed. [Source](https://github.com/MidnightLightning/ethereum-blockwatch) - [cachewarmer](https://github.com/BrendanBenshoof/cachewarmer) - Donate ipfs gateways to cache other people's content -- [dillo-ipfs](https://ipfs.io/ipns/12D3KooWBG1fsFRF4ykpidXVNVnbon5KLfv67pkkGeFstrwftVVb/) - IPFS integration for the Dillo web browser. [Source](https://git.scuttlebot.io/%25C35b%2BMlZ%2Fy5TT1e7SG66eNKEIdX5DRl9PRUxbhvO89k%3D.sha256) +- [dillo-ipfs](https://git.scuttlebot.io/%25C35b%2BMlZ%2Fy5TT1e7SG66eNKEIdX5DRl9PRUxbhvO89k%3D.sha256) - IPFS integration for the Dillo web browser. - [gatsby-plugin-ipfs](https://github.com/moxystudio/gatsby-plugin-ipfs) - Adds support for deploying Gatsby websites to IPFS by ensuring that assets are relative. - [git-remote-ipfs](https://github.com/cryptix/git-remote-ipfs) - push/pull repositories from/to IPFS - [http2ipfs](https://github.com/jbenet/http2ipfs-web) - This is a simple webtool to add URLs to an IPFS node. diff --git a/data/apps.yaml b/data/apps.yaml index 5ca271a..ff8f991 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -138,10 +138,6 @@ content: source: https://github.com/victorbjelkholm/ipfsbin description: > Pastebin clone build. - - title: IPFSStore - website: https://ipfsstore.it - description: > - Pinning paid with Steem - title: markup.rocks website: https://ipfs.io/ipfs/QmWPgJnUGLB1LPh9KMG9LEN4LVu5e17TwkEtcmTWdNn9V6/#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u source: https://github.com/davidar/markup.rocks @@ -157,10 +153,6 @@ content: website: https://partysha.re description: > A simple file sharing app. - - title: FileNation - website: https://filenation.io/ - description: > - The simplest way to send your files around the world using IPFS. - title: Playback source: https://mafintosh.github.io/playback/ description: > @@ -204,7 +196,6 @@ content: IPFS based code bin. (Read only for now) - title: Gorilla REPL viewer source: https://github.com/keorn/ipfs-gorilla-repl - demo: https://ipfs.io/ipfs/QmRNUauWDvZFkAp1Bw3kAode3jT8aH2vx7LYzbS7H6R3Mg/view.html?path=/ipfs/QmbRdyLXiFWrKc5hW1NbvpUxF9tLovWCPgiz4BDhjD9k3j description: > Gorilla is a rich REPL for Clojure in the notebook style. - title: a markdown renderer @@ -216,10 +207,6 @@ content: - title: a qr-code renderer source: https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/qr-render demo: https://ipfs.io/ipfs/QmccqhJg5wm5kNjAP4k4HrYxoqaXUGNuotDUqfvYBx8jrR/qr#enter%20text%20here - - title: Arpadyne - website: https://arpadyne.computes.com - description: > - The New Internet - DNS powered by OrbitDB. Content delivered via IPFS. - title: TallyLab website: https://tallylab.com/ picture: /images/tallylab.jpg diff --git a/data/articles.yaml b/data/articles.yaml index 661b589..d219960 100644 --- a/data/articles.yaml +++ b/data/articles.yaml @@ -24,9 +24,6 @@ content: - title: The InterPlanetary File System Wants to Create a Permanent Web date: '2015-09-18' website: http://motherboard.vice.com/read/the-interplanetary-file-system-wants-to-create-a-permanent-web - - title: Eris + IPFS - date: '2015-11-01' - website: https://monax.io/blog/2015/11/01/eris-and-ipfs/ - title: HTTP is obsolete. It's time for the distributed, permanent web date: '2015-09-08' website: https://ipfs.io/ipfs/QmNhFJjGcMPqpuYfxL62VVB9528NXqDNMFXiqN5bgFYiZ1/its-time-for-the-permanent-web.html diff --git a/data/datasets.yml b/data/datasets.yml index cd1e134..4cd0474 100644 --- a/data/datasets.yml +++ b/data/datasets.yml @@ -8,12 +8,6 @@ content: website: https://ipfs.io/ipfs/QmNvTjdqEPjZVWCvRWsFJA1vK7TTw1g9JP6we1WBJTRADM source: https://github.com/ipfs/archives/issues/18 size: 500MB - - title: Presidental Daily Briefs - hash: /ipfs/Qme6epvZDj3vzHcFKdF1nZhbixjw8Bn4imGcKnbUyBJL89 - website: https://ipfs.io/ipfs/Qme6epvZDj3vzHcFKdF1nZhbixjw8Bn4imGcKnbUyBJL89 - source: https://github.com/ipfs/archives/issues/23 - description: - size: 480MB - title: XKCD hash: /ipns/xkcd.hacdias.com website: https://ipfs.io/ipns/xkcd.hacdias.com diff --git a/data/tools.yaml b/data/tools.yaml index 12d2c86..2ab7362 100644 --- a/data/tools.yaml +++ b/data/tools.yaml @@ -11,7 +11,7 @@ content: description: Adds support for deploying Gatsby websites to IPFS by ensuring that assets are relative. - title: dillo-ipfs source: https://git.scuttlebot.io/%25C35b%2BMlZ%2Fy5TT1e7SG66eNKEIdX5DRl9PRUxbhvO89k%3D.sha256 - website: https://ipfs.io/ipns/12D3KooWBG1fsFRF4ykpidXVNVnbon5KLfv67pkkGeFstrwftVVb/ + website: https://git.scuttlebot.io/%25C35b%2BMlZ%2Fy5TT1e7SG66eNKEIdX5DRl9PRUxbhvO89k%3D.sha256 description: IPFS integration for the Dillo web browser. picture: /images/dillo-ipfs.png - title: git-remote-ipfs From 5a3a3e5f38ae3d82c81cbc25e2f8bca80d0d6971 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 30 Apr 2019 13:33:54 +0100 Subject: [PATCH 13/19] chore: move to Circle CI and fix deploy (#244) License: MIT Signed-off-by: Henrique Dias --- .circleci/config.yml | 47 ++++++++++++++++++++++++++++++++++ ci/Jenkinsfile | 4 --- src/layouts/partials/list.html | 3 ++- 3 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 ci/Jenkinsfile diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..266a179 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,47 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/node:10.15.1-browsers + environment: + NO_SANDBOX: true + steps: + - checkout + - run: npm install + - run: npm run build + - persist_to_workspace: + root: . + paths: + - public + + deploy: + docker: + - image: olizilla/ipfs-dns-deploy + environment: + DOMAIN: awesome.ipfs.io + BUILD_DIR: public + steps: + - attach_workspace: + at: /tmp/workspace + - run: + name: Deploy website to IPFS + command: | + pin_name="$DOMAIN build $CIRCLE_BUILD_NUMBER" + + hash=$(pin-to-cluster.sh "$pin_name" /tmp/workspace/$BUILD_DIR) + + echo "Website added to IPFS: https://ipfs.io/ipfs/$hash" + + if [ "$CIRCLE_BRANCH" == "master" ] ; then + dnslink-dnsimple -d $DOMAIN -r _dnslink -l /ipfs/$hash + fi + +workflows: + version: 2 + build-deploy: + jobs: + - build + - deploy: + context: ipfs-dns-deploy + requires: + - build diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile deleted file mode 100644 index ef1e8bc..0000000 --- a/ci/Jenkinsfile +++ /dev/null @@ -1,4 +0,0 @@ -website([ - website: 'awesome.ipfs.io', - record: '_dnslink' -]) diff --git a/src/layouts/partials/list.html b/src/layouts/partials/list.html index 8bfa17e..aa09419 100644 --- a/src/layouts/partials/list.html +++ b/src/layouts/partials/list.html @@ -45,7 +45,8 @@ From 9544b76bbe3168ab0ab45aa397dfb37013c15ddb Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 30 Apr 2019 15:04:20 +0100 Subject: [PATCH 14/19] chore: remove travis and just use circle (#246) License: MIT Signed-off-by: Henrique Dias --- .circleci/config.yml | 19 +++++++++++++++++++ .travis.yml | 7 ------- 2 files changed, 19 insertions(+), 7 deletions(-) delete mode 100644 .travis.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 266a179..727ad0f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,13 @@ version: 2 jobs: + awesome: + docker: + - image: circleci/ruby:2.4.2-jessie-node + steps: + - checkout + - run: gem install awesome_bot + - run: awesome_bot --allow-redirect --allow-dupe --allow-ssl -w ipfs.io README.md + build: docker: - image: circleci/node:10.15.1-browsers @@ -38,8 +46,19 @@ jobs: workflows: version: 2 + check-links: + triggers: + - schedule: + cron: "0 0 * * *" + filters: + branches: + only: + - master + jobs: + - awesome build-deploy: jobs: + - awesome - build - deploy: context: ipfs-dns-deploy diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cd3108b..0000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: ruby -rvm: - - 2.2 -before_script: - - gem install awesome_bot -script: - - awesome_bot --allow-redirect --allow-dupe --allow-ssl README.md From 6f15e77ed672bd081fdde1fe7ba5f8e6b6c35332 Mon Sep 17 00:00:00 2001 From: Daniel Aleksandersen Date: Tue, 30 Apr 2019 16:04:47 +0200 Subject: [PATCH 15/19] Add Eternum.io (#229) --- README.md | 1 + data/apps.yaml | 5 +++++ src/static/images/eternum.png | Bin 0 -> 46908 bytes 3 files changed, 6 insertions(+) create mode 100644 src/static/images/eternum.png diff --git a/README.md b/README.md index 3fc47b3..6183b05 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [digx](https://www.dgx.io/) - Digix is an asset-tokenisation platform built on Ethereum and IPFS. - [dtube](https://d.tube) - Distributed video sharing with steem.it intergrations, using ipfs for backend storage. - [enzypt.io](https://enzypt.io/) - A website to buy and sell files through Ethereum and IPFS. [Source](https://github.com/flex-dapps/enzypt) +- [Eternum](https://www.eternum.io/) - Paid pinning service with an easy-to-use API. - [Ethlance](http://ethlance.com) - First completely decentralised job market platform built on Ethereum and IPFS. [Source](https://github.com/madvas/ethlance) - [git-ipfs-rehost](https://github.com/whyrusleeping/git-ipfs-rehost) - A script to rehost your git repos in ipfs. - [Global Upload](https://globalupload.io/) - File transportation service for IPFS, upload files to the future of distributed web. diff --git a/data/apps.yaml b/data/apps.yaml index ff8f991..6986bcf 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -73,6 +73,11 @@ content: description: > Distributed video sharing with steem.it intergrations, using ipfs for backend storage. + - title: Eternum + website: https://www.eternum.io/ + picture: /images/eternum.png + description: > + Paid pinning service with an easy-to-use API. - title: Ethlance website: http://ethlance.com source: https://github.com/madvas/ethlance diff --git a/src/static/images/eternum.png b/src/static/images/eternum.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5e67b68cbee54fba2f6c26869f84d8013099b9 GIT binary patch literal 46908 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

kmb=W3f$AWLRsya8Z+&#IEJi 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 Date: Tue, 30 Apr 2019 17:35:30 +0100 Subject: [PATCH 16/19] feat: clean up (a lot) (#247) License: MIT Signed-off-by: Henrique Dias --- .gitignore | 2 - Makefile | 6 -- package.json | 34 ++++---- scripts/data.js | 29 +++++-- scripts/make-data.js | 138 +++++++------------------------ scripts/make-readme.js | 10 +-- scripts/utils.js | 5 +- src/layouts/_default/baseof.html | 15 ++-- src/layouts/_default/list.html | 9 -- src/layouts/_default/single.html | 3 + src/layouts/index.html | 8 +- src/layouts/partials/list.html | 119 +++++++++++++------------- 12 files changed, 141 insertions(+), 237 deletions(-) delete mode 100644 Makefile delete mode 100644 src/layouts/_default/list.html create mode 100644 src/layouts/_default/single.html diff --git a/.gitignore b/.gitignore index 6789b40..3a106de 100644 --- a/.gitignore +++ b/.gitignore @@ -27,9 +27,7 @@ stroke*.svg public dist /src/resources -/src/data /src/content -/src/layouts/partials/indexes /src/static/fonts /src/static/app.css /src/static/app.js diff --git a/Makefile b/Makefile deleted file mode 100644 index b9a954c..0000000 --- a/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -build: - npm --version - node --version - npm install - npm run lint - npm run build \ No newline at end of file diff --git a/package.json b/package.json index 4de646d..f2ebcee 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "1.0.0", "private": true, "dependencies": { - "ipfs-css": "^0.5.2", - "lunr": "^2.3.0", - "tachyons": "^4.10.0" + "ipfs-css": "^0.12.0", + "lunr": "^2.3.6", + "tachyons": "^4.11.1" }, "scripts": { "start": "node ./scripts/dev.js", @@ -18,24 +18,22 @@ "build:css": "postcss --no-map --use postcss-import cssnano -o src/static/app.css src/css/*.css", "build:js": "browserify -g uglifyify src/js/app.js -o src/static/app.js", "build:data": "node ./scripts/make-data.js", - "build:hugo": "hugo -s src -d ../public --cleanDestinationDir", - "build:minify": "html-minifier --input-dir=./public --output-dir=./public --file-ext=html --collapse-whitespace --remove-comments" + "build:hugo": "hugo -s src -d ../public --cleanDestinationDir --minify --gc" }, "devDependencies": { - "babel-eslint": "^8.2.6", - "browserify": "^16.2.2", - "chokidar": "^2.0.4", - "cssnano": "^4.0.1", - "ecstatic": "^3.2.1", - "fs-extra": "^6.0.1", - "html-minifier": "^3.5.19", - "hugo-bin": "^0.29.0", - "node-yaml": "^3.1.1", - "npm-run-all": "^4.1.3", - "postcss-cli": "^5.0.1", - "postcss-import": "^11.1.0", + "babel-eslint": "^10.0.1", + "browserify": "^16.2.3", + "chokidar": "^2.1.5", + "cssnano": "^4.1.10", + "ecstatic": "^4.1.2", + "fs-extra": "^7.0.1", + "hugo-bin": "^0.43.4", + "node-yaml": "^3.2.0", + "npm-run-all": "^4.1.5", + "postcss-cli": "^6.1.2", + "postcss-import": "^12.0.1", "shx": "^0.3.2", - "standard": "^11.0.1", + "standard": "^12.0.1", "uglifyify": "^5.0.1", "watch": "^1.0.2" }, diff --git a/scripts/data.js b/scripts/data.js index 6b6932d..6965e32 100644 --- a/scripts/data.js +++ b/scripts/data.js @@ -1,23 +1,34 @@ const fs = require('fs') -const path = require('path') +const { join } = require('path') const yaml = require('node-yaml') -const { sortAbc } = require('./utils') -const dataDir = path.join(__dirname, '../data') +const { sortAbc, sortInv, slugify } = require('./utils') +const dir = join(__dirname, '../data') const trimIfExists = (str) => str ? str.trim() : undefined -const files = fs.readdirSync(dataDir) - .map(file => path.join(dataDir, file)) +module.exports = fs.readdirSync(dir) + .map(file => join(dir, file)) .map(file => yaml.readSync(file)) .map(file => { - file.content = file.content.map(({ title, description, ...file }) => ({ + file.slug = slugify(file.title) + file.type = 'category' + + file.content = file.content.map(({ title, description, ...meta }, i) => ({ + ...meta, title: trimIfExists(title), description: trimIfExists(description), - ...file + category: file.slug, + color: file.color, + index: i })) + let sort = (a, b) => sortAbc(a.title, b.title) + + if (file.slug === 'articles') { + sort = (a, b) => sortInv(a.date, b.date) + } + + file.content = file.content.sort(sort) return file }) .sort((a, b) => sortAbc(a.title, b.title)) - -module.exports = files diff --git a/scripts/make-data.js b/scripts/make-data.js index 967e70e..9a8ff93 100644 --- a/scripts/make-data.js +++ b/scripts/make-data.js @@ -1,126 +1,50 @@ const lunr = require('lunr') const fs = require('fs-extra') -const path = require('path') -const { slugify, capitalize, sortAbc } = require('./utils') +const { join } = require('path') -const dataDir = path.join(__dirname, '../src/data') -const contentDir = path.join(__dirname, '../src/content') -const indexesDir = path.join(__dirname, '../src/layouts/partials/indexes') +function getData () { + let data = require('./data') -const processDataType = (data) => { - const content = data.content.map(info => { - const { website, ...more } = info - - return { - website: website, - categories: [data.title.toLowerCase()], - ...more - } + data.push({ + title: 'Awesome IPFS', + slug: '_index', + content: data + .reduce((arr, cat) => arr.concat(cat.content), []) + .map((el, i) => ({ + ...el, + index: i + })) }) - delete data.content - - return { - info: { ...data }, - content: content - } + data.forEach(makeIndex) + return data } -const writeContentFile = (data) => { - const basename = slugify(data.title) - const filename = path.join(contentDir, `${basename}.md`) - - fs.writeFileSync(filename, JSON.stringify(data)) -} - -const makeIndex = (data) => { - const indexes = { 'index': [] } - - const checkField = (field, el) => { - if (Array.isArray(el[field])) { - el[field].forEach(t => { - const key = `${field}_${t}` - - if (indexes[key]) { - indexes[key].push(el.index) - } else { - indexes[key] = [el.index] - } - }) - } - } - - data.forEach(el => { - indexes.index.push(el.index) - checkField('tags', el) - checkField('categories', el) - }) - - data = data.map(({index, title, description = '', tags = [], categories = []}) => ({ +function makeIndex (category) { + const data = category.content.map(({ index, title, description = '', tags = [], category = '' }) => ({ ref: index, - data: `${title} ${description} ${tags.join(' ')} ${categories.join(' ')}` + data: `${title} ${description} ${tags.join(' ')} ${category}` })) - for (const index in indexes) { - const idx = lunr(function () { - this.ref('ref') - this.field('data') - - indexes[index].map(i => data[i]).forEach(this.add.bind(this)) - }) - - const file = path.join(indexesDir, index + '.html') - const json = JSON.stringify(idx).replace(`'`, `\\'`) - - fs.writeFileSync(file, ``) - } + category.index = lunr(function () { + this.ref('ref') + this.field('data') + data.forEach(this.add.bind(this)) + }) } const process = () => { - fs.ensureDirSync(dataDir) - fs.ensureDirSync(contentDir) - fs.ensureDirSync(indexesDir) - fs.emptyDirSync(dataDir) - fs.emptyDirSync(contentDir) - fs.emptyDirSync(indexesDir) + const dir = join(__dirname, '../src/content') + fs.ensureDirSync(dir) + fs.emptyDirSync(dir) - let data = [] - let types = [] - let typesObj = {} + const data = getData() - require('./data') - .map(processDataType) - .forEach(({info, content}) => { - types.push(info) - data.push(content) - }) - - data = data.reduce((a, v) => a.concat(v), []) - .sort((a, b) => sortAbc(a.title, b.title)) - .map((v, i) => { v.index = i; return v }) - - data.forEach(writeContentFile) - makeIndex(data) - - types = types.map(t => { - t.title = capitalize(t.title) - return t - }).sort((a, b) => { - if (a.weight < b.weight) { - return -1 - } - - if (a.weight > b.weight) { - return 1 - } - - return 0 - }).forEach(type => { - typesObj[type.title.toLowerCase()] = type - }) - - const pt = path.join(dataDir, 'categories.json') - fs.writeFileSync(pt, JSON.stringify(typesObj)) + for (const { index, slug, ...meta } of data) { + const filename = join(dir, slug + '.md') + fs.writeFileSync(filename, `${JSON.stringify(meta)} +`) + } } process() diff --git a/scripts/make-readme.js b/scripts/make-readme.js index 9aae10e..34b5179 100644 --- a/scripts/make-readme.js +++ b/scripts/make-readme.js @@ -3,18 +3,12 @@ const path = require('path') const files = require('./data') const readme = path.join(__dirname, '../README.md') const template = path.join(__dirname, 'readme-template.md') -const { slugify, sortInv, sortAbc } = require('./utils') +const { slugify } = require('./utils') const toc = files.map(cat => `- [${cat.title}](#${slugify(cat.title)})`).join('\n') const sections = files.map(category => { - let sort = (a, b) => sortAbc(a.title, b.title) - - if (category.title === 'Articles') { - sort = (a, b) => sortInv(a.date, b.date) - } - - const content = category.content.sort(sort).map(item => { + const content = category.content.map(item => { let block = '- ' let mainUrl = '' diff --git a/scripts/utils.js b/scripts/utils.js index 72bd658..3573363 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -20,12 +20,9 @@ const slugify = (text) => text.toString() .replace(/^-+/, '') .replace(/-+$/, '') -const capitalize = (text) => `${text.charAt(0).toUpperCase()}${text.slice(1).toLowerCase()}` - module.exports = { sort, sortInv, sortAbc, - slugify, - capitalize + slugify } diff --git a/src/layouts/_default/baseof.html b/src/layouts/_default/baseof.html index 875a157..ed673f5 100644 --- a/src/layouts/_default/baseof.html +++ b/src/layouts/_default/baseof.html @@ -11,15 +11,12 @@ IPFS

Awesome IPFS

- - {{ $site := .Site }} - {{ range $name, $taxonomy := .Site.Taxonomies.categories }} - {{ $color := (index $site.Data.categories $name).color }} - {{ $icon := print (index $site.Data.categories $name).icon ".svg" }} - - {{ partial (print "icons/" $icon ) }} - {{ $name }} + + {{ range (where .Site.Pages "Type" "category") }} + + {{ partial (print "icons/" .Params.icon ".svg" ) }} + {{ .Title }} {{ end }} diff --git a/src/layouts/_default/list.html b/src/layouts/_default/list.html deleted file mode 100644 index 913007d..0000000 --- a/src/layouts/_default/list.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ define "main" }} - -{{- $p1 := (print .Data.Plural "_") -}} -{{- $p2 := lower .Title -}} -{{- $partial := print $p1 $p2 -}} -{{- partial "list" .Data.Pages -}} -{{- partial (print "indexes/" $partial) -}} - -{{ end }} diff --git a/src/layouts/_default/single.html b/src/layouts/_default/single.html new file mode 100644 index 0000000..c9f00c1 --- /dev/null +++ b/src/layouts/_default/single.html @@ -0,0 +1,3 @@ +{{ define "main" }} +{{ partial "list" . }} +{{ end }} diff --git a/src/layouts/index.html b/src/layouts/index.html index 265d3a0..c9f00c1 100644 --- a/src/layouts/index.html +++ b/src/layouts/index.html @@ -1,7 +1,3 @@ -{{ define "main" }} - -{{ partial "list" .Pages }} -{{ partial "indexes/index" }} - +{{ define "main" }} +{{ partial "list" . }} {{ end }} - diff --git a/src/layouts/partials/list.html b/src/layouts/partials/list.html index aa09419..3952728 100644 --- a/src/layouts/partials/list.html +++ b/src/layouts/partials/list.html @@ -12,74 +12,75 @@
- {{ range (sort . "Params.index") -}} -
- {{ $cat := index .Params.categories 0 }} - {{ $color := (index .Site.Data.categories $cat).color }} -
- {{ humanize $cat }} + {{ range (sort .Params.content "index") -}} +
+
+ {{ humanize .category }} +
+ +
+ -
- + {{- if isset . "date" -}} + {{ template "text" dateFormat "January 2, 2006" .date }} + {{- end -}} - {{- if isset .Params "date" -}} - {{ template "text" .Date.Format "January 2, 2006" }} - {{- end -}} + {{- if isset . "description" -}} + {{ template "text" .description }} + {{- end -}} - {{- if isset .Params "description" -}} - {{ template "text" .Params.description }} - {{- end -}} + {{- if isset . "size" -}} + {{ template "text" (print "Size: " .size) }} + {{- end -}} - {{- if isset .Params "size" -}} - {{ template "text" (print "Size: " .Params.size) }} - {{- end -}} - - {{- if isset .Params "hash" -}} - - {{- end -}} - - {{- if isset .Params "picture" -}} + {{- if isset . "hash" -}} - {{ end }} + {{- end -}} -
- {{- if isset .Params "website" -}} - - {{ partial "icons/globe.svg" }} - - {{- end -}} - - {{- if isset .Params "source" -}} - - {{ partial "icons/code.svg" }} - - {{- end -}} - - {{- if isset .Params "demo" -}} - - {{ partial "icons/flask.svg" }} - - {{- end -}} -
+ {{- if isset . "picture" -}} + -
+ {{ end }} + +
+ {{- if isset . "website" -}} + + {{ partial "icons/globe.svg" }} + + {{- end -}} + + {{- if isset . "source" -}} + + {{ partial "icons/code.svg" }} + + {{- end -}} + + {{- if isset . "demo" -}} + + {{ partial "icons/flask.svg" }} + + {{- end -}} +
+ +
+
{{ end }}
+ +{{ .Content }} \ No newline at end of file From 469716e832b6c25409a4b0beedb00ecddabd2325 Mon Sep 17 00:00:00 2001 From: CHEVALAY JOSSELIN Date: Tue, 30 Apr 2019 18:56:27 +0200 Subject: [PATCH 17/19] feat: add ipfscloud --- data/apps.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/apps.yaml b/data/apps.yaml index 2037c75..b050fb0 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -305,6 +305,11 @@ content: Run your IPFS node on your machine without having to bother with command line tools. Manage your node, add your files, easily change the settings... everything from just one interface. + - title: IpfsCloud + source: https://github.com/cluster-labs/ipfscloud-web + website: https://ipfscloud.store + description: > + A Decentralized, Anonymous Cloud Storage Platform on IPFS. - title: 3Box website: https://3box.io source: https://github.com/uport-project/3box From 00e80cca664699d6c8673cfc12e6028e1528b6b9 Mon Sep 17 00:00:00 2001 From: Romaric Juniet Date: Wed, 1 May 2019 00:57:44 +0800 Subject: [PATCH 18/19] feat: update Request after rebranding (#238) --- README.md | 2 +- data/apps.yaml | 6 +++--- src/static/images/request-network.png | Bin 53672 -> 0 bytes src/static/images/request.svg | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) delete mode 100644 src/static/images/request-network.png create mode 100644 src/static/images/request.svg diff --git a/README.md b/README.md index a1a8f18..0032e3d 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ Sniffs the DHT gossip and indexes file and directory hashes. Metadata and search - [PushToTalk](http://timothy.hobbs.cz/push-to-talk/index.html) - Push to Talk lets you edit audio essays and publish them with IPFS. - [qri](https://qri.io) - Dataset verion control, discovery and collaboration tools (free, open-source). [Source](https://github.com/qri-io/qri) - [Request Network](https://request.network/) - Decentralized network for financial transactions. [Source](https://github.com/RequestNetwork/requestNetwork) -- [TallyLab](https://tallylab.com/) - Local-first, end-to-end encrypted data diary app for capturing, analyzing, and sharing data about any and everything. +- [TallyLab](https://tallylab.com/) - Local-first, end-to-end encrypted diary app for capturing, analyzing, and sharing data about any and everything. - [Temporal](https://github.com/RTradeLtd/Temporal) - Temporal is an easy to use API and platform for integrating IPFS and other distributed/decentralized storage technologies into enterprise applications - [Textile Photos](https://www.textile.photos) - Textile Photos is a secure, mobile digital wallet for your photos. [Source](https://github.com/textileio/textile-mobile) - [ToDo List Demo](https://ipfs.io/ipfs/QmfFaH6dGibQ5JwEdsujeHBzsmHUsFRB5kU9P8nzPyzMv2/) - A ToDo List demo app that uses windows.ipfs. [Source](https://github.com/ipfs-shipyard/demo-ipfs-todo) diff --git a/data/apps.yaml b/data/apps.yaml index b050fb0..f0f8a2c 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -325,9 +325,9 @@ content: source: https://github.com/amar-laksh/xfce-screenshooter-ipfs-support description: > A fork of xfce-screenshooter with IPFS support! - - title: Request Network + - title: Request website: https://request.network/ source: https://github.com/RequestNetwork/requestNetwork - picture: /images/request-network.png + picture: /images/request.svg description: > - Decentralized network for financial transactions. + The open network for transaction requests. diff --git a/src/static/images/request-network.png b/src/static/images/request-network.png deleted file mode 100644 index 6959bd5658a1caeb4bfd1bf1c7f48346de4b174f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53672 zcmeFZXH-*Bw>FB10-}H*qS8b~lok=`Rf?#9sB{8^Vnj*^y@etQ(gZ{VM4EyK(tD^0 zf`HUe10?h+CA82(!naX8-+Rxwf9}sa#`)oJjF3I|T64|$%x9LB(8rI|&z!n+ii(Qr z%!B)?PpPP=mkyB5lgtbfx5&Z^7de)LGf2 zQI9Vkn92lx?OF1A+=73LPr)~d8gjZi3oXrMs$+CYRMgBbsc0@2ex=t0&3B7R{nsal zf2^asJnY5%pWo{`PEEJXt;wPi2t4#(&(|kgAIbUqk^JSCjw?T|iK_mmG(gnJ|N98d z<^L7+NB#e+t3&(yUt{=RWB4zy_+MlAUt{?HqcPOoW(MME1C1F859bm2N<+-^ zd=cMEM;`q5nWpRS>b{U^dr`>eS;v1h0F_|I!h% zAog?TPlO$>pli=HjKkU+TNgx>Jd@e!2`F7G;<9Nb<9mtQFm2gogbcboQyx0NjPLVLHXfb22Dc~BWn1V9qR(xgT(S-Sp4MJ1~0V)4! zOQE{@Ox^24_VAL1d6|JOG5^ooKSOBrbHTCYH5567>0Y-aZro!oPeOZa_KKM@WtTQZ zYyMZX-^hjZASxQ~2UHWIZ8lb2e@TcT4K}4r!SwS0354Wb!dLRkQ(n{dPDzfY5{_>L z3^rckAS+W*Piaw2D2x)@M(!Sxj=Bfe3!TZITz`;6knvUCTg&{w1JBN;2JLUjrkaaW zt`Yg=X|9J-)%(7Go`?Y6d6_C8=F#|uMyIB?>Dn5S&o{iIVXR74ej~5Crx&T<-b4C! zoKDHShW_$!Gs3S@_OC`%sdKc!i6Xnd^tO5=`{edJQoquoH)A&1xuQUmS-&q)GyfJm z7KngYM>?q-E=#F^E?0W$!&jz?g^ZPG^ok%d1A+Dd<4SxD3YK600JagXZf@IvS8P?E zV2@Ii2R)%i?Pj_D6; z-+J8hXa7_*vl`~M-U7))ECXO5L+nI>eS!_1-Qi(%swJBr>U8Mqx@%{ZDztm-T?+oH z`5Aq#0{O$nCp0N;V`0owhjMFiWWH08bk}=1B{Ocx^Wp{INLLS!6qCe#XdQrImau&M zl<;T{y?q-Y@7AkgRCjPoJ`Qd6{?PiU{xAP4RHe7~B4hUrz{qdOO!A4#JN|G@ru`1C z2c$`9K=UovZpkMgJ52xRh>B)U#hi@o?Zs1?Q?+?0Q3nYJUoyXcr<_iS1{B2qma3i{ z_~qK!zf5y{n#FKCEMlH;@cZ?=O6q>H>u5Ddx-vPM3-B{%V6_?!4=*quefKvFHr3zT zyZK8N(C?<37wXRKis$O>)Aoi?%9oe|1FLATK}CKn}!pK z*9lvd5IRjxz$bocNlTvoqk*Y=Hn|l)}r0tB@%zSPne##HnmNL~uXZjHx zzHpp+&*~BT!Q^5u$Y)PcJD%Li@gAjrsHqDe>V4g)0Uu|{KL>GZ;*X<@t|Am;6m~+# z9wnOjZUy#^Z}HwT1NJi|o;rNy?|$m&ejm?0XhBm9tM*pVlERQ$Y5~AXE-))qME$tt z%)lQ|_k@CKiGIotCh=RGBR({W`m%*@TJyyemqD&fnnCT*TDQjgefua%UDRfMR#{|s zx=r~3ztF6e$}K$2akCM10uzn!xSISM96b2(mHBgTK|(NN;c zXtXEoPxlcl>%Fn!vN2Z!{yZ{WmJZgh&tq>}q2gf3i{0@PVs^}ehPFDJ=eGayrb~vp zOW&0A&hrw7#qW#OsI6Lw)Wxr5JjdKxaZ!7sUX%d`fBM)AGh0+0WVyy3cFgT(p9 z03{5N*dQb2qS==AFX_j6r+^x@t+9|FZ_&Oi7D`Na9KYl5)PBJTQ zTWq>~<@r`P)bd3C`l6p*ZR@KxjF}C7pHtupviRM5ULPZ(VB!eTf3|qz%fYJb{1UR} zHpB_AOW&(N0)>AoIvRA98SUAhzCXlBX6d&;YnF_aZE48Ht1AS76L47*MdV3XQ_r+u zWjZ9|t*Fu7?JX9#-cYKr&kg@%6~FBe)D?>XTrIFFe?LZo(J!XQhAI9(UL5#;-fC>x z(UquHQB2+Q3QsNCvwl(}qsuNqI%VXByE#ANzuGn*;eTM=(;fyj!(0Tw?F0aBpl_jf zMdXf=Z+D<4me?)UHZ{c2`ySu%ID?U2dr1wGpM0d-*CSCmS+))2c-S=01s%q);bMgp ztT9t^;H3=bofmG=$l713p^bAaLpadpDDC#xxxU;4r! zqo&8vNnFuv)y_37RZRU+J|SEq-p}}$WQ2hh$5VPZdN5@C*h3D`G?QfiuT|c{4**`r zuP@yy&$v5&1HH2pZ_W)hJW~<-V_mn`IBKJKHOkO0G)BmAU8Bt6D%@~p+udSuH0_(P zPAJnDjG%rH*W>L5|GgApVjsJ9(`H!h?KNCkEpnRx?Y8W4K6q~g9PGj5{yw~7{OyLz z!7Q>T1MTd#PiMtT6~L$Y^59;1Ab;=|VeVtBogMy`B2!uYE;H)63|$kVf_)hY13^4F zmO5Lh1trXp6lcR&)SXVgi~uZ%FR)GKTUoehR`9BooXRd=RlmX6X_rX;ldSs5x_(GS zy@6ombf(x~h=cWu{jl#n@h2<4-WjJP_@^AOl8B16_A<2-Xg?2}Pownw8~?3XSMwD= z@&#wWf;8R%5s&`SDHUU5nyUIcs;>*KXgsURdb{|gdv4+Tm-kg4fhnC-EP|j`D@6MzHS9)b$?MtclHUNMW%jG)#1ioAJr!D5s z(uwMao5jvULL`jHy=Tj}68AVQH&4YD#4cOTfSnBa3KfQ{3g}iO_vmx7m_Nh`>UW2i zc_*)1kUt9h&a#kmRvw_J8?dO>jRJ?Mgg(_FG93iFZ^EW;F^oPY%Gi#Uzu0+2QGs%9 z{$ek$%_0VD7_}@1?-zp{2pNX?teZH@2&&t8Q5I8eb~95D-g`p_bBbDXwNvkvLI7eA z#|+>-%cs+Cito_(St_B(X@dHw$ilLM;u}n|*`qU|>YftuLSbc7_ix7Lk)Lu^LN^Pz z(@B*H5d%c;4^c+Icll;sJ^^zTr(_bY;)3){c8bdiWVqanR7)i+hjEptIUI<0#Aoxu z$Q*v)_E;Ctvw#_EJ!$*R5nHV=q*y|RGajAKJj*sM8{RK3__Yw-oPffRZ6`Qb~ z14W7ldxAMDI}pmFss*%NR33LkOJdp-|ZC&sv>+s7nsF_uws*A8X7oYBAx6^K8 z_M2UJu-qL!r|@#y0$oleZzDhj2IF~yOd-!`RMk=Etw>3$-3SV6u} ze6CEZx*<{Td$Ii#s-ej@*z_$)adCm6hjdU7l_74OWH~iW15jWQ;P@xkGq*D|mC(YQ z3?}I3;jsmflDthwz1b{^++)x?++;R^kZH^4+tR4``76qECX91-Zn4l-@|_s_>Bc!K z5Hase3Yg0?mF2{`%8lu#L@42LQe=pMM5E+EeLR<6;~*@lGC6}Dyq+zzF8IjrCutC0 zlU-i?BF%6&qvNqp{_5@JF^XWM)2SB;d_*`CGZ0Hc^GEMY^W0S2Xvk2JKySF9MGLA9 zmJY~krE6&&`i=C!;mZLjL!*^8M&qMW$X(XpU8I2(0h!>J+6YH3u@6`-u_wph3`TF{ zVEm6&%~5>dXosulj+tG&eRulpw(WFTg-~gp90sr&&OOL}1fJLEbQmx4H`^CeBMWDV z`?9Q}tp$75_bKC;+=n&oNnS~Dt(b!aG3>W(a(8pj5WLEqJN-J4?MN8`tc5>Z$P1xW z=XWgrz*RVpCFg@0@_ywV^;%m#Mck*~!cOZ`bczd`;YO%~S8#IH$|)EK({mHqt)Xs+ zE-Z<9;w3AXi;Y^&+t&f_Mi-!htMW!%=A%fUw^GN) zfJwpw<^tG`lJC~Ba|eNxeGsJVN-Zgs;#{>l2eHeN21qi4_DiNr5jhv{rDFliR+nsd zEMRUp8gGNfy|Qr0gSrHq$JAVIl!R?=Lm=`dbM?|}Nqu^a~FiQ5=A`XhyrfAw$f2BA~;d{(ed42 zna5Vk{t|(rS{7^uq!D`7#g8tHZ$LTeU>>Oc_m~d1qN?WZ^#=y0Zrn2mOeiu>Q7QSZbADAMEMLV{}Q^0P~8Wi7O@ZGuOY! zmz~cyZvssejzCIN3doK56^6R{$@B9j`mSzqR7Sef>ld_liv2u&LxS?(ek8K{KVpG> zz>w_5E_m{kq*fkW$!$C3(2g*i9aD3XLsPD;?Kf-drutJL+xV6HZR=YJiIg3@ldK_~ z()cx2rHa&NbzfI*20WC)I~(TZ$|CP9D2fm8UQco%J&zS}Zi!20o5%}^#C_SS>`?M) z8QITV%B8W?j8oXl-(!e|Z$8w&xxLImyR3MerTX#Y$vpWJi{oS13duYE(K(-@0(RRw zEFXTb$nyPekR0i7pt4rU6FVgD$y#Px^R47I-K=7Ii_m0*7{=er{kazfLSBSF5EG2g zwpg zs~Xqr9c((1c_*%+cRrhr#FDBp$$jqjwIv}m^hw#sjFOMY8dyYfiJkk!Zr_cjtkbWX zO|~TsYDc1q1h!)$#5VjY{3oKM*<)523QTU_O1+pOCYi+zXBre*J0zW6Z;HF8GH6@# zhL<4g8u0sKZPq;z{yY69^~ZoS)I2=H2l2zTe9V)ElFX>w$S3s!euyFXo$z0oJA`kZ z+auYd{zH|L3!G>+uth9*T8ZbSO>O`u%Ba!m1E^U~*p8q&Og1(;o%P}SBlWj}OD0o`k-BK%0>0Q|4{_pry1E&MFv}5tR z7>w(67HvArK`3b#y>!(e^EhHV6Rfy45?~$40GQWLASq6jihFkHDmBt?9YKI^b^1n} zQ>ZLtD|Zq9wHdAYWulD{B5@_XyZ?(!+UH&r{<1zMk&T$mwCI@cbG|R-O;sBqJxU^b z{mrH6svA0nJH-w0BX}D<_H9Lwxv1on#DSQYn2ih^^U+Kp8EGTb=5A!{w9s1WJo2g3 zxnZHyc4VQ{awPkXI00T7<$h39;6Hu*_lHE6Ij2oYRAnJ$H%eV6;)(~6$HW=>!Kmkv za&2P-lMk5W!v;NHFx`FcL^rb4)pcP`>_D9(iXVpQcI!1=2JJoWW8*;}WGc3ms)!iW zm_$8Lp?P#6;QJZ)L6%=Tkc9uqX06ne(tHWubb3FD4P@$U$k@HEl`tv1nK$Nr?~_^F z!O4ktU9nvl%gP(%Rj4|*%0mftwS-H7kPi-X#dva;XBDCP%p~ztNhA_)v3>nf5BXp< z3Kh4!yFccRm;#C+QjZSHSTy%t{!~wX^8|cPm@lOa_x8LoaCn$myO8TT8#|W~!46xS znX;-#mJT9{P8W9>qD0`F_eAD-_~z(&Fi-ZL_IK}9FQ@t`$nSJi&;C*pr@8DX1bAGt zayS4GK$+zNm>OqXvg-|ixFxV_uDin?771}p6)lA6POJ>VT(AIg*w z(>tCbg_F*CZPgonwc>IETiqqJ&r%?|0qRmZQ|};HC|irU=B@k zCXFxNry9ui2}q%hG1)t3HmCq}xNYMBzO>%=_d<4_bu9~my3zhl;k699eRr*F@dS?ND`Mww6r zy!KG~^~Ad92K63>D7i%Ls;zui47*>_mRzl%|CyQA(&xQZr@!ep4IyLKEv@?HaxHXg z7>963WjGv%ntrS~&B>d)9$?^@b=pw-Uvq zRQ9gpy+pz1#0%Jm-U?M?tt@%}A3FTB=rH@&!l- zQpjTAX07+Zg7Bnd61s(=)GOwp@a-fgu=zHik?DW2>jm}SSN~=i+^!$p_`QkmIS#3o z*D5fKlR!CZ^b9sU%zPsPPuG~=+E~vxgn#?}9=16S2<5`sb*eRopmSLeat<+aGyna7*?(w*gdh%7$ zd86FjN+ZKIX7=J;D47ks%~jht*tRNU@Ieg)&56s@D)3YD9{+@YuK=n84zfKJNKYxb zAxCXwPO$(L663c_2d^6=#71;k|5~qzte_S$ahx{LIWMOFNyzBXbl&9E=ej;fGtten zu&e%(C@=&WI~GyUSmOg!M&S#F%aRvba=7wX|tG})4q#M-6 zZvN}vXnU`Y)#51vi#M$uUZ_^n6q?D@12ra%)73m?MkkPQyB}hU%M%hUJD;2L_&Usw ziOlP3*=u;)Op(3)p#3=_#P?ZFcG9k&W>!z9D{>$p;ussL6Qq7G}fK}}em&(DpoXUJ%Enq4OLIEBkv_Tagw%)yiw`q=R zBqhpt7%7xmD;V5M__|lP3U9mD?;#q;8!Jh(+mH?SgnF-XAcv40u2z-63*G>)3Ql-@ zWS&y(1{2Cs}`2bMI9c0LR$t6|4o8wPkD0EEE)FU}nvnJ2t`+Tya6x86>n{qVZvI z!3C&0VvdE_9+_y%mCpn*?fu`Vjlnbc;+G@uu?{lgZ9`kB&x$o5@twS%z`Vk|qYi5H z{(VT)4Q(U}0daf#wQ`$KzGYgDNiIl4Bl42$Fea&twXU~dXkxd6IN%6M!Bq9N#{)Hv zUZTwEIlnuywHZyjwX9)nRw+KCU4Uc0X0KvjZRjq|HRU2Y64yUarYJDFK$N8d9|Nt> z)Nkvp?U#Qcy2W@&5#A%*W3M*x9~d6knAn!gxPghZdPqK}aRASr^LOpTkV7h2Kym$# zCz$in?N7TX-iMHAQ-LzN-w&ER`njbRtRLNUmFC})z!MO?YiwK9in7`FjqJ8*>)6p# zzAK$UHJig*BU>}jXiQsrE>~|~yRJ8W#a~JblsdOP5>L6s{P7NTZiP1Ptqb}OP6Kln zOTNzyyf3fpnjM7o_I#g9SyrxmYxv4k-AYiDa0RbcLF4@MOm2wA=S9fbh4bm0Gjs;} z1jRPf-xky1@N%9*Ma^~N6^zF^`)JaDm^gw z{*9~dp^T7-67Pw<8yl`y-`RZ`<}&X)+}h&Aj!>t|musbwtN5KP`slo@q#;nP=~mlJ z$kxc)u(!8oPK_btrq*40(g#Lj%v#548i3cFW;M@gzs36S2thPn)s6V?zIN?U+=gT*fr zUNa_x#|mn$+3L#5i^YuYkCB12SRea=6&Mm=HgBxG8*uzD7#n)i03E0{lt_1ZXU*i> zfMXBGK6Q2KKb72P9yI$X7{*xcX)0g_jTKj97sr~$8WP{v`v~e*@;QOwF*bWqb(X>= z@Y4^Amp%1RdvA4m156PB?kkSkbnwvts6Th{a4g}lGv-7c+=fkH%gle2C?cPE5k@y& zn4LwwzDgtA%4G@0$?gvYRSCM{=TbNjHTYQUE5Ha@a)+ydw-vQ1N zBSRdP{3CHA@+FE${`I55rY&|3KN#N0WpbimIlKBwz9(yUF`r1TNcEbV5k1eXFeXtm zWW?tm9inEJpjFxUkMNu|ueSE$dDn*&KMw+N4p^cwz_a2`a39%i3#;eemU>Uheuvm0 z*bDiP(``lGn7$gQ_smaxVvlXzT{@WLc=625)0ae>lGZMuo^t0TCJURVC<8&FWo7{L zi!L8qyFWUHP8Vqku2W?lZ}`qCPac;0yYlEdUw;>uz2$?wN>|6R06CvLZ)^J83^=*K zaF=D&q67JYeWwZ@E-ZlyDl_qGwLUP2Z$VzQM}@Q(&*Cqv2U)Ib7}X!v?-nArvkxYH zZL;@8vpIhp3kc<}3nTqhq^A0#^#BDH&xvm9-Yq=$qdC;(N_hc58YGn;E5Hn;X#?W%~ST3K|M_W}9Q>ci@{%Iz6Lv5KRmW zk*3qYM{_-fN^m(wdSw`3lEB%%Jr1a)E|Qag^?M;DI)Xlp}iEhgV&GG+ev>gkZvv9FP=BEBC24=p4Duvpu~g~ zp?Yku83I~>_HF8LPwF3O-3}@2 zxKz{VX#$=t63OC#oHFTF3&lefVl{F~iUrb<{TEz4L0YJQ+XWD>g-@=H&7&6LNtbWU zADR_~#_`|}lyo7etGWF}d>46qWw?eBg+kEkI`=cF2KhuTEX7`VNWY)WZW0exO}OjK zHcIE#W(8I23I>6jJC!}}m(NM)V{QD`XbT?NVTNyMoDbu@C4DGeY+(52UsZ_)%q{!g z_MP)5*~|EJoj{J*Ruu2fqaMhlWBZQu9w|=FV+CD2`nv*0TsGhgkfpN3I_;0h>j7Vpy-#Aar z`rsuzHsP1e+_%4aH=$qh@kHRziy5w49H69T;Wq-Hhr`CILvo*(f>iOWu>}Mr9(U79 z2RHBOz0}emPv(!e4gq>F(53n>k*3frQzn^u38|I&!!JVSeJfS_fH;7m8oEsX!%j13v9RidWD7*GVX=6OgrXHWiJ5exnB9{<>* zJr%9vJR)4U@b@Q>v1}8t&(kCeutl*T7#?0k5Idz~F^J~!-C{ndp<6no0qb{~*D~EVCa2YZS=+QJ8*#5iG~w{P|I0NrsRFJBGiEMQ z#z8Plbzpg^i{ZAZ74n8jT;dH7%LtjpB3qWEW`no&+rk$_Z76;^M^Kq=`;>aZ(=gPz zTA~an`H_DdU%cs7IQ-`EdL{E>fZ6ifp(??DViKTeM2Z)$=>ce6vST{^d~=zi z?0e?!;<6Rt1+ae#VM(swUfN;OjdLqcq&w;~T*T0Bhy(kNb(NA@M*b)^` zHw};x?M@Sy%)jULg@*f}yLP@4Gh!|{Q}l2dpVsIi!KR z>_AlG+!s|Jm_bUhjOh+)Kx-%0nG|ym=z80Tbsi2-07=GAmcbHo&<0s?U-@bvUzL`W z_2Pj^2s@XJ7 zrYQmN;w0;M#NiMKfTyl>a(k~4?=Z1((?1V7uoniZ_~rGj@IU(5vJEg8@$Fk92^D(2vg@ z{wnoy7mE~757}Ge@$WdL%!z;rrz~!I#t&xaL9VyEB;?MtWEMKx2cQghvl;CCY&fLL zB=1q|5q4GZ)91FskY?}o^B_6;oXi&xfY_o`O9$q^E4!sR9=*8yPFgw>NZa>T z-&T$FA`c7K{;DmuW%n0!H#c6@eGnJr9qK}a&fGv5qHiapm>OX?^ex;T5nZMVw*vGV zff_NxC=s{hq-4Gi5c+2S$V!zX+IF8>abMCunUO~-Y4KW&%9CKdP!i=wKNcSI;NIdp zt}^8nD5d=KR``t-Iwxp0TCXWx_tGvHyzM?gD$r%7rD;k5PG~9fBgavq_4az<;@Vsf zm%meT-YYvk6H6(3;kW5-rn5z_1vhN%1Sg)`jTx*~Z}v&V`teW<(mt^))<1Jd`SvyLA!KI731 zi}b-yFY8mf7VqDT=>WAIW{O&aG6vHHgcB>zt2H~0`^z0lbTO+GJd#*L$BFa5<^OmS z?wlJwT}V7T>*DsAQ|6gEs`R3|+f3>x)vtJQw71K6B~G+Ssv(6K7v8(k-fp6j#!X!d z5Z{%}4N=b{S!=AGOTqY_DMg(Abn(|!xu6m^;UYr#`t|Y>9zsJ*9(ia%IJvP(a=^&T z^;ff}9tPC|C} zyxZM=lsDV1cgaSA5m+4{g1)yh{x7-G^F3+@eoDSDB#+Z~`VIc#s!o zfa#k*=|J<{@zBI&4b14aA-3*m-(J%NmR#WPCf~9Fl|Dl)e#xVJ zMaqvlYGfy-bZUYi{e*6HD0lCvskCKT&DlMck*6d4*|mG$_XJ1En-)7!3zOw^Ow?AY zfa34PwB#Kr{?WMr7-ZMt?1;1#-CBNZNPb`?+@O2t;Cp9lTJlNjHRy-(wEW`rVxMe5 zWkqLoM0i`K^rSX=wY_w`PyFG}V*y1#wTCBXe){>5&iLQdsSJ!H0N`Tso{bmAv)7Kw zCAeWu$=IJC=;>vd&CB0HXUl+ndL`Ds*X|ERW+e(L45Yfv2wJx(OVfC30JD4e?^fe~ z;w~^$r#@a6j_9>gMBxp7g*zbSXNKV0AL7xuGK;6Y;#NCsE2nG3-R)p^DEe7UD@H4` zptYIgfJQL;+5}d@uWfN1+2*KZ-VShtW_#sIu76H`$mo)LcXsvpW~&pU-hFP;Zzz{_M51m71%kk&jLNxwwT-iW^jQY|c4%Fu zXhAIq_NTAei;Vqrzt}x-;VKY^L_cXdocJ4u9Mk9l1hKN2 zOUHcllrT*Wa_a8Co;1^Z%4}c9wT+?Uu%7l5$OGVx#Dn)J5grsZR8yVe7kU zPTGKXB4nISbNrQ6_?U*fW(#|z4u3`<&xa|2n?*jC;YEaKU@0f-K*r^LXB(sybfyV6 zI_))D7>E366Kx7o3yejt#exr~g@&eH)_ET4u365R{hwvr8}H`WEPKZ?E>jsh=KDZ~ zM0=kvvE-*j9#8>N*&tRDAHdkBp9jvVcz6jhx+ZOTb!%m}K6RUjKTmk{<|uixQ~3M@2OV;j$+8fTO< z@Q$OiSxw5Hw*j%Wsmcz2Ve_)%I=!41{y6r*3p>+_5AK4B1ts8wT*~gj@TY>NDj|?v zjPKABLKLS+!m|zxtihJ5RR_pq*&_!wtZ~j$qle2T*1pdK1M;ut zLe8XU+)p%H+bv6B%3^#qnT@0wocd3|3gTOJ9i7Wpu`~`=Euy!pzNDZwV!!6nFK89w zv^%nMBZkXOb^m7KpnzBy6O??lE(~!n`}XX=y#>{!%(?Rs+y=6d@FzBTp+pmI{V=?K zb9kPw&Q#@aT0=H;r+C&t-{EEq*JdlPmL{PZTVxUO)5K36^_HlG8r^wm-wEM6=kP?k-J@*At)u{A2 z{?Jg9Bu)Y~^TSYM$Vn~B?JX1Ta1h^L=v7SV`DmF}y;WO4kG|rB(%DkC(GW2jZ%rUFOto13{

Jg<=I2c;`y}hJLT2GM-J8 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

*M-f>Nyi-{vFZf-h>kV$j9`w6^zkVK$f(6 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 diff --git a/src/static/images/request.svg b/src/static/images/request.svg new file mode 100644 index 0000000..76cf70f --- /dev/null +++ b/src/static/images/request.svg @@ -0,0 +1 @@ +Artboard 1 \ No newline at end of file From 7a505b3b6b4f72b3adad23bf20d9bae3f845d79b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Jeanmart?= Date: Tue, 30 Apr 2019 17:59:29 +0100 Subject: [PATCH 19/19] feat: Add Mahuta to the tools list (#219) --- README.md | 1 + data/tools.yaml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 0032e3d..26c4c0a 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,7 @@ Sniffs the DHT gossip and indexes file and directory hashes. Metadata and search - [IPLD Explorer](https://explore.ipld.io) - Explore the Merkle Forest from the comfort of your browser [Source](https://github.com/ipfs-shipyard/ipld-explorer) - [IPRedirect](https://github.com/JayBrown/IPRedirect) - Browser userscript for redirecting IPFS/IPNS addresses to your local gateway. This should work on any browser that hasn't had an extension written for it yet and has support for userscripts. - [ipscend](https://github.com/diasdavid/ipscend) - Tool for hosting web apps and static websites in IPFS +- [mahuta](https://github.com/ConsenSys/Mahuta) - Mahuta is a plug and play service for your micro-service architecture allowing to collect, store and index data on IPFS and offering search functionalities (full text, query). - [pinbot](https://github.com/whyrusleeping/pinbot) - Pin content via IRC - [Public gateway status checker](https://ipfs.fooock.com/) - Web app to check public states of IPFS gateways, including latency and gateway writable state. [Source](https://github.com/fooock/ipfs-gateway-checker) - [Siderus Orion](https://orion.siderus.io) - Easy to use IPFS desktop client for macOS, Windows and Linux [Source](https://github.com/Siderus/Orion) diff --git a/data/tools.yaml b/data/tools.yaml index 32b134f..dfd0a57 100644 --- a/data/tools.yaml +++ b/data/tools.yaml @@ -101,6 +101,11 @@ content: source: https://github.com/arsyun/ipfs-common description: > some common tools, 1.CID to human readable cid, 2.cid and block name convert, 3. read the leveldb tools. +- title: mahuta + website: https://github.com/ConsenSys/Mahuta + source: https://github.com/ConsenSys/Mahuta + description: > + Mahuta is a plug and play service for your micro-service architecture allowing to collect, store and index data on IPFS and offering search functionalities (full text, query). - title: Public gateway status checker website: https://ipfs.fooock.com/ source: https://github.com/fooock/ipfs-gateway-checker