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 f88ea69..ca44394 100644 --- a/README.md +++ b/README.md @@ -28,29 +28,31 @@ 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) - [a qr-code renderer](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/qr-render) - [Demo](https://ipfs.io/ipfs/QmccqhJg5wm5kNjAP4k4HrYxoqaXUGNuotDUqfvYBx8jrR/qr#enter%20text%20here) - [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. - [Boards](https://ipfs.io/ipns/boards.ydns.eu) - Distributed social platform that runs in the browser. [Source](https://github.com/fazo96/ipfs-boards) +- [brig](https://brig.readthedocs.io/en/latest) - File synchronization with git like interface and FUSE filesystem. [Source](https://github.com/sahib/brig) - [Cohort](https://github.com/zignig/cohort) - A golang app to preset a threejs interface and get all of its assets out of IPFS. - [Computes](https://computes.io) - Computes.io is a distributed supercomputer powered by IPFS. - [dapple](https://github.com/nexusdev/dapple) - Dapple is a Solidity developer multitool designed to manage the growing complexity of interconnected smart contract systems. - [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) -- [Filemap](https://filemap.xyz/) - Upload files to a geographic point and never memorize a link again. -- [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. @@ -58,17 +60,17 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [InterPlanetary Wayback](https://github.com/oduwsdl/ipwb) - Web Archive (WARC) indexing and replay using IPFS. - [Interplanetary Wiki](https://github.com/jamescarlyle/ipfs-wiki) - Wiki built on top of IPFS - [IPFessay](https://gitlab.com/stavros/IPFessay) - A simple way to publish uncensorable essays on IPFS. -- [IPFS Desktop](https://github.com/ipfs/ipfs-desktop) - 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. +- [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) - 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. - [IPFS Drive](http://ipfs-drive.ydns.eu) - In browser file manager for IPFS. [Source](https://github.com/fazo96/ipfs-drive) - [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 Bitcoin - [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. @@ -80,31 +82,36 @@ Everyone is welcome to submit their new awesome-ipfs item. In order to add an el - [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) - [Philes](https://philes.co) - A simple browser-based IPFS notepad app. [Source](https://github.com/chrismatthieu/philes) +- [Pinata](https://pinata.cloud) - Build and manage your dapp through Pinata’s REST API and IPFS toolkit. - [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 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) - [ujo](http://ujomusic.com/) - A blockchain marketplace for musicians. - [uport](https://uport.me/#home) - Uport is a mobile, self-sovereign identity and key management system, built on the Ethereum blockchain. +- [xfce-screenshooter-ipfs-support](https://github.com/amar-laksh/xfce-screenshooter-ipfs-support) - A fork of xfce-screenshooter with IPFS support! ## Articles +- 2018-08-06: [Content Identifiers in IPFS](https://pascalprecht.github.io/posts/content-identifiers-in-ipfs/) - 2018-07-11: [On future-proof cryptographic hashes](https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/) +- 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) - 2017-05-05: [Decentralized indexes for public genomic data](https://github.com/luizirber/2017-recomb) -- [Downloading nodejs versions with nvm/n over IPFS](https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc) - 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/) - 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 @@ -112,15 +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://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. @@ -129,10 +136,9 @@ 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-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-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-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 @@ -144,14 +150,16 @@ 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 +- [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 Simply Explained](https://www.youtube.com/watch?v=5Uj6uR3fp-U) -- [Juan Benet at Fullstack Fest 2016](https://www.youtube.com/watch?v=jONZtXMu03w) -- [Juan Benet at Stanford 2015](https://www.youtube.com/watch?v=HUVmypx9HGI) +- [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. ## Discussions @@ -159,7 +167,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 83dc32b..4a577f8 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 @@ -36,6 +43,11 @@ content: source: https://github.com/fazo96/ipfs-boards description: > Distributed social platform that runs in the browser. + - title: brig + website: https://brig.readthedocs.io/en/latest + source: https://github.com/sahib/brig + description: > + File synchronization with git like interface and FUSE filesystem. - title: Cohort source: https://github.com/zignig/cohort description: > @@ -61,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 @@ -111,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: > @@ -126,10 +146,6 @@ content: source: https://github.com/victorbjelkholm/ipfsbin description: > Pastebin clone build. - - title: IPFSStore - website: https://ipfsstore.it - description: > - Pinning paid with Bitcoin - title: markup.rocks website: https://ipfs.io/ipfs/QmWPgJnUGLB1LPh9KMG9LEN4LVu5e17TwkEtcmTWdNn9V6/#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u source: https://github.com/davidar/markup.rocks @@ -145,14 +161,6 @@ content: website: https://partysha.re description: > A simple file sharing app. - - title: Filemap - website: https://filemap.xyz/ - description: > - Upload files to a geographic point and never memorize a link again. - - 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: > @@ -165,7 +173,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: > @@ -196,7 +204,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 @@ -208,10 +215,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 @@ -264,6 +267,11 @@ content: picture: /images/peer-bandwidth-demo.jpg description: > An demo app that uses window.ipfs, provided by the IPFS Companion web extension to get and graph bandwidth info for your IPFS node + - title: Pinata + website: https://pinata.cloud + picture: /images/pinata.png + description: > + Build and manage your dapp through Pinata’s REST API and IPFS toolkit. - title: PubSub Chat Demo website: https://ipfs.io/ipfs/QmWZ3u5S7RjFXKfW6dSZhj7CozcvpqJxm48RYMmKkWcmNQ/ source: https://github.com/tableflip/ipfs-pubsub-chat-example @@ -289,9 +297,30 @@ content: description: > A ToDo List demo app that uses windows.ipfs. - title: IPFS Desktop - source: https://github.com/ipfs/ipfs-desktop + source: https://github.com/ipfs-shipyard/ipfs-desktop picture: /images/ipfs-desktop.png 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. + - title: 3Box + website: https://3box.io + source: https://github.com/uport-project/3box + picture: /images/3box.png + description: > + Create and manage your Ethereum Profile, and your personal data. Use the 3box-js + library to integrate profiles into your dapp. + - title: Autonomica "IPFS Social Proof" + source: https://github.com/IBM/ipfs-social-proof + description: > + Autonomica is a Keybase-like Dapp for creating an identity and proving this identity via published social media and web proofs. + - title: xfce-screenshooter-ipfs-support + source: https://github.com/amar-laksh/xfce-screenshooter-ipfs-support + description: > + A fork of xfce-screenshooter with IPFS support! + - title: Request Network + website: https://request.network/ + source: https://github.com/RequestNetwork/requestNetwork + picture: /images/request-network.png + description: > + Decentralized network for financial transactions. diff --git a/data/articles.yaml b/data/articles.yaml index aa7ba78..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 @@ -35,6 +32,15 @@ content: - title: On future-proof cryptographic hashes date: '2018-07-11' website: https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/ + - title: Content Identifiers in IPFS + date: '2018-08-06' + website: https://pascalprecht.github.io/posts/content-identifiers-in-ipfs/ - title: Decentralized indexes for public genomic data date: '2017-05-05' website: https://github.com/luizirber/2017-recomb + - title: Understanding the IPFS White Paper part 1 + date: '2017-08-10' + website: https://decentralized.blog/understanding-the-ipfs-white-paper-part-1.html + - title: Understanding the IPFS White Paper part 2 + date: '2017-08-21' + website: https://decentralized.blog/understanding-the-ipfs-white-paper-part-2.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 962a8bc..2ab7362 100644 --- a/data/tools.yaml +++ b/data/tools.yaml @@ -9,6 +9,11 @@ content: - title: gatsby-plugin-ipfs source: https://github.com/moxystudio/gatsby-plugin-ipfs 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://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 source: https://github.com/cryptix/git-remote-ipfs description: push/pull repositories from/to IPFS @@ -37,9 +42,6 @@ content: - title: ipfs-gui source: https://github.com/marcin212/ipfs-gui description: Windows UI integration and IPFS installer -- title: ipfs-linux-service - source: https://github.com/dylanPowers/ipfs-linux-service - description: IPFS Linux Init Daemon - title: ipfs-paste source: https://github.com/jbenet/ipfs-paste description: Paste stdin and clipboard to IPFS @@ -71,9 +73,6 @@ content: - title: ipfs-add-from-url source: https://github.com/maxlath/ipfs-add-from-url description: Add a file to IPFS from a URL instead of a file path -- title: ipfs-gui - source: https://github.com/marcin212/ipfs-gui - description: Windows UI integration and IPFS installer - title: ipfs-linux-service source: https://github.com/dylanPowers/ipfs-linux-service description: IPFS Linux Init Daemon @@ -94,3 +93,12 @@ content: description: > 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. +- title: ipfs-common + 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: 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/data/videos.yaml b/data/videos.yaml index f371fe2..4bd63be 100644 --- a/data/videos.yaml +++ b/data/videos.yaml @@ -9,9 +9,26 @@ content: - title: IPFS Simply Explained website: https://www.youtube.com/watch?v=5Uj6uR3fp-U picture: /images/ipfs_simply_explained_video.jpg + description: > + 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! - title: Juan Benet at Stanford 2015 website: https://www.youtube.com/watch?v=HUVmypx9HGI picture: /images/stanford-2015.jpg - - title: Juan Benet at Fullstack Fest 2016 + description: > + The talk includes a broad look at The IPFS Project, and a discussion on evolving the network stack through open source protocols R & D. + - title: Distributed Apps with IPFS - Juan Benet at Fullstack Fest 2016 website: https://www.youtube.com/watch?v=jONZtXMu03w picture: /images/fullstack-fest-2016.jpg + description: > + 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. + - title: Textile Build Series - A Free Online Workshop + website: https://www.youtube.com/playlist?list=PLC8CEtJ9shDznO1tpvGe--BVEWmCKY9_Z + picture: /images/textile-build-series.jpg + description: > + 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. 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/3box.png b/src/static/images/3box.png new file mode 100644 index 0000000..1483478 Binary files /dev/null and b/src/static/images/3box.png differ diff --git a/src/static/images/dillo-ipfs.png b/src/static/images/dillo-ipfs.png new file mode 100644 index 0000000..ef07ad9 Binary files /dev/null and b/src/static/images/dillo-ipfs.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/pinata.png b/src/static/images/pinata.png new file mode 100644 index 0000000..c237775 Binary files /dev/null and b/src/static/images/pinata.png differ diff --git a/src/static/images/request-network.png b/src/static/images/request-network.png new file mode 100644 index 0000000..6959bd5 Binary files /dev/null and b/src/static/images/request-network.png differ diff --git a/src/static/images/textile-build-series.jpg b/src/static/images/textile-build-series.jpg new file mode 100644 index 0000000..0d8d06a Binary files /dev/null and b/src/static/images/textile-build-series.jpg differ