diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..727ad0f --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,66 @@ +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 + 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 + check-links: + triggers: + - schedule: + cron: "0 0 * * *" + filters: + branches: + only: + - master + jobs: + - awesome + build-deploy: + jobs: + - awesome + - build + - deploy: + context: ipfs-dns-deploy + requires: + - build 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/.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 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/README.md b/README.md index 6e99c3a..a0dba61 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el ## Apps +- [2read](https://2read.net/) - Convert article in current tab to readable form and upload it to writable node(s). [Source](https://github.com/meehow/2read) - [3Box](https://3box.io) - Create and manage your Ethereum Profile, and your personal data. Use the 3box-js library to integrate profiles into your dapp. [Source](https://github.com/uport-project/3box) - [a js video player](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/play) - [Demo](https://ipfs.io/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXs) - [a markdown renderer](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/markdown-viewer) - [Demo](https://ipfs.io/ipfs/QmSrCRJmzE4zE1nAfWPbzVfanKQNBhp7ZWmMnEdbiLvYNh/mdown#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u) @@ -35,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. @@ -47,12 +47,12 @@ 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) -- [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. @@ -65,7 +65,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. @@ -78,7 +79,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 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) @@ -87,7 +88,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [Playback](https://mafintosh.github.io/playback/) - IPFS playback support. This allows casting a video in IPFS to a Chromecast. - [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) +- [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 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 @@ -109,7 +110,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,16 +121,15 @@ 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/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 - [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. @@ -139,12 +138,13 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [ipfs-add-from-url](https://github.com/maxlath/ipfs-add-from-url) - Add a file to IPFS from a URL instead of a file path - [ipfs-chrome-extension](https://github.com/dylanPowers/ipfs-chrome-extension) - Chrome extension to redirect ipfs.io traffic to local gateway - [ipfs-chrome-station](https://github.com/fbaiodias/ipfs-chrome-station) - Chrome extension to redirect ipfs.io traffic to local gateway -- [ipfs-common](https://github.com/arsyun) - some common tools, 1.CID to human readable cid, 2.cid and block name convert, 3. read the leveldb tools. [Source](https://github.com/arsyun/ipfs-common) +- [ipfs-common](https://github.com/arsyun) - Some common tools, 1.CID to human readable cid, 2.cid and block name convert, 3. read the leveldb tools. [Source](https://github.com/arsyun/ipfs-common) - [ipfs-companion](https://github.com/ipfs/ipfs-companion) - Browser extension that simplifies access to IPFS resources. - [ipfs-gui](https://github.com/marcin212/ipfs-gui) - Windows UI integration and IPFS installer - [ipfs-linux-service](https://github.com/dylanPowers/ipfs-linux-service) - IPFS Linux Init Daemon - [ipfs-mount](https://github.com/richardschneider/net-ipfs-mount) - Mount IPFS as a mapped drive on Windows - [ipfs-paste](https://github.com/jbenet/ipfs-paste) - Paste stdin and clipboard to IPFS +- [ipfs-publish](https://ipfs-publish.uhlir.dev) - Continuous Delivery tool for delivery of static websites from Git providers to IPFS. [Source](https://github.com/AuHau/ipfs-publish) - [ipfs-screencap](https://github.com/jbenet/ipfs-screencap) - Capture screenshots, publish them to IPFS, and copy the link to the clipboard. - [ipfscrape](https://github.com/victorbjelkholm/ipfscrape) - Scrape a webpage with all assets and put it in IPFS - [ipfsecret](https://github.com/c2fo-lab/ipfsecret) - Encrypt and decrypt IPFS files with a secret passphrase @@ -152,13 +152,17 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [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) +- [IPDR](https://github.com/miguelmota/ipdr) - IPFS-backed Docker Registry +- [Sweet IPFS](https://github.com/RHazDev/Sweet-IPFS) - Full node for Android ## Videos - [Distributed Apps with IPFS - Juan Benet at Fullstack Fest 2016](https://www.youtube.com/watch?v=jONZtXMu03w) - This talk breaks down how to build a dynamic app on top of IPFS with CRDTs, pub/sub, and slick UIs. It also delves into new models for distributed computation, and the ethical importance of distributing the web. -- [IPFS Alpha - Why we must redistribute the web](https://www.youtube.com/watch?v=skMTdSEaCtA) +- [IPFS Alpha - Why we must redistribute the web](https://www.youtube.com/watch?v=skMTdSEaCtA) - [IPFS Simply Explained](https://www.youtube.com/watch?v=5Uj6uR3fp-U) - Let's take a look at how IPFS works, how it can solve issue's like censorship and if it would really work across multiple planets! - [Juan Benet at Stanford 2015](https://www.youtube.com/watch?v=HUVmypx9HGI) - The talk includes a broad look at The IPFS Project, and a discussion on evolving the network stack through open source protocols R & D. - [Textile Build Series - A Free Online Workshop](https://www.youtube.com/playlist?list=PLC8CEtJ9shDznO1tpvGe--BVEWmCKY9_Z) - A full Training Program to teach devs on how to build for the Decentralized Web. The series covers a ton of content, touch multiple parts of the IPFS stack and guides devs through building a simple DApp. @@ -169,7 +173,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el ## Want to hack on IPFS? -[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md) +[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md) ## License 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/data/apps.yaml b/data/apps.yaml index 2252287..381bf25 100644 --- a/data/apps.yaml +++ b/data/apps.yaml @@ -3,6 +3,13 @@ color: aqua icon: stroke_marketing description: Applications built with IPFS or with functionality that uses IPFS. content: + - title: 2read + website: https://2read.net/ + source: https://github.com/meehow/2read + picture: /images/2read.svg + description: > + Convert article in current tab to readable form and upload it + to writable node(s). - title: killcord website: https://killcord.io/ source: https://github.com/nomasters/killcord @@ -66,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 @@ -116,9 +128,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: > @@ -131,10 +146,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 @@ -147,13 +158,11 @@ content: description: > Distributed, peer-to-peer chat application on IPFS. - title: Partyshare - website: https://partysha.re + website: https://busterlabs.github.io/Partyshare + source: https://github.com/BusterLabs/Partyshare + picture: /images/Partyshare_Logo.png 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. + A simple file sharing desktop app. - title: Playback source: https://mafintosh.github.io/playback/ description: > @@ -166,7 +175,7 @@ content: website: https://qri.io source: https://github.com/qri-io/qri description: > - Dataset creation, collaboration, and discovery on the distributed web. + Dataset verion control, discovery and collaboration tools (free, open-source). - title: ujo website: http://ujomusic.com/ description: > @@ -197,7 +206,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 @@ -209,15 +217,11 @@ 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 description: > - Local-first, end-to-end encrypted diary app for capturing, analyzing, and sharing data about any and everything. + 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: > @@ -301,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 @@ -316,13 +325,14 @@ 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. - title: KDE-DolphinServiceMenu-IPFS source: https://github.com/amar-laksh/KDE-DolphinServiceMenu-IPFS description: > - Service Menu for Dolphin File Manager to upload files to IPFS \ No newline at end of file + Service Menu for Dolphin File Manager to upload files to IPFS + The open network for transaction requests. 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 5f2c775..4cd0474 100644 --- a/data/datasets.yml +++ b/data/datasets.yml @@ -8,18 +8,12 @@ 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: /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 diff --git a/data/tools.yaml b/data/tools.yaml index df16037..9e084f0 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 @@ -11,7 +14,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 @@ -97,4 +100,19 @@ content: website: https://github.com/arsyun 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: ipfs-publish + picture: /images/ipfs-publish.png + website: https://ipfs-publish.uhlir.dev + source: https://github.com/AuHau/ipfs-publish + description: Continuous Delivery tool for delivery of static websites from Git providers to IPFS. 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 + description: Web app to check public states of IPFS gateways, including latency and gateway writable state. 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/readme-template.md b/scripts/readme-template.md index 84b42d9..dc90d37 100644 --- a/scripts/readme-template.md +++ b/scripts/readme-template.md @@ -30,7 +30,7 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el ## Want to hack on IPFS? -[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md) +[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md) ## License 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 8bfa17e..3952728 100644 --- a/src/layouts/partials/list.html +++ b/src/layouts/partials/list.html @@ -12,73 +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 diff --git a/src/static/images/2read.svg b/src/static/images/2read.svg new file mode 100644 index 0000000..9830a57 --- /dev/null +++ b/src/static/images/2read.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/static/images/Partyshare_Logo.png b/src/static/images/Partyshare_Logo.png new file mode 100644 index 0000000..4ea59c4 Binary files /dev/null and b/src/static/images/Partyshare_Logo.png differ diff --git a/src/static/images/eternum.png b/src/static/images/eternum.png new file mode 100644 index 0000000..1c5e67b Binary files /dev/null and b/src/static/images/eternum.png differ diff --git a/src/static/images/ipfs-publish.png b/src/static/images/ipfs-publish.png new file mode 100644 index 0000000..dcf2995 Binary files /dev/null and b/src/static/images/ipfs-publish.png differ diff --git a/src/static/images/request-network.png b/src/static/images/request-network.png deleted file mode 100644 index 6959bd5..0000000 Binary files a/src/static/images/request-network.png and /dev/null differ 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