{{ substr .hash 0 10 }}...{{ substr .hash $length 5 }}
+
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 f5167c0..26c4c0a 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.
@@ -48,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.
@@ -66,19 +65,19 @@ 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.
- [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.
- [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)
@@ -109,7 +108,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 +119,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.
@@ -154,7 +151,9 @@ 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
- [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)
+- [Sweet IPFS](https://github.com/RHazDev/Sweet-IPFS) - Full node for Android
## Videos
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 5ca271a..f0f8a2c 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
@@ -123,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: >
@@ -138,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
@@ -154,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: >
@@ -204,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
@@ -216,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: >
@@ -308,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
@@ -323,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/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 e91b8a2..dfd0a57 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
@@ -103,3 +106,7 @@ content:
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/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 @@
{{ substr .hash 0 10 }}...{{ substr .hash $length 5 }}
+