feat: awesome ipfs website
32
.gitignore
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
yarn.lock
|
||||||
|
|
||||||
|
public
|
||||||
|
dist
|
||||||
|
/src/resources
|
||||||
|
/src/data
|
||||||
|
/src/content
|
||||||
|
/src/layouts/partials/indexes
|
||||||
|
/src/static/fonts
|
||||||
|
/src/static/app.css
|
||||||
|
/src/static/app.js
|
|
@ -5,6 +5,7 @@ Please ensure your pull request adheres to the following guidelines:
|
||||||
- Search previous suggestions before making a new one, as yours may be a duplicate.
|
- Search previous suggestions before making a new one, as yours may be a duplicate.
|
||||||
- If you just created something, wait at least a couple of weeks before submitting.
|
- If you just created something, wait at least a couple of weeks before submitting.
|
||||||
- Make an individual pull request for each suggestion.
|
- Make an individual pull request for each suggestion.
|
||||||
|
- Add the idea to [data][./data] and then run `node run build`.
|
||||||
- Use the following format: `[resource name](link) - Description.`
|
- Use the following format: `[resource name](link) - Description.`
|
||||||
- New categories, or improvements to the existing categorization are welcome.
|
- New categories, or improvements to the existing categorization are welcome.
|
||||||
- Keep descriptions short and simple, but descriptive.
|
- Keep descriptions short and simple, but descriptive.
|
||||||
|
@ -13,7 +14,7 @@ Please ensure your pull request adheres to the following guidelines:
|
||||||
- Check your spelling and grammar.
|
- Check your spelling and grammar.
|
||||||
- Make sure your text editor is set to remove trailing whitespace.
|
- Make sure your text editor is set to remove trailing whitespace.
|
||||||
- The pull request should have a useful title and include a link to the package and why it should be included.
|
- The pull request should have a useful title and include a link to the package and why it should be included.
|
||||||
- If you are submitting an article, include the date before, and sort if in the list by date. Example: `* YYYY-MM-dd: [<title≥](link) (<outlet>)`.
|
- If you are submitting an article, don't forget to include the date.
|
||||||
- Submit products when they are useable, or at a state which has something to show which is awesome in itself. This cuts down on half-finished implementations.
|
- Submit products when they are useable, or at a state which has something to show which is awesome in itself. This cuts down on half-finished implementations.
|
||||||
|
|
||||||
Thank you for your suggestions!
|
Thank you for your suggestions!
|
||||||
|
|
6
Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
build:
|
||||||
|
npm --version
|
||||||
|
node --version
|
||||||
|
npm install
|
||||||
|
npm run lint
|
||||||
|
npm run build
|
159
README.md
|
@ -1,159 +0,0 @@
|
||||||
# Awesome IPFS [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
|
|
||||||
|
|
||||||
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io)
|
|
||||||
[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/)
|
|
||||||
[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)
|
|
||||||
|
|
||||||
> Useful resources for using [IPFS](https://ipfs.io) and building things on top of it
|
|
||||||
|
|
||||||
_This list is for projects, tools, or pretty much any things related to IPFS that
|
|
||||||
are totally_ **awesome**_. This is for products which are already awesome - if
|
|
||||||
you have plans for cool stuff to do with IPFS, you should build it, and then
|
|
||||||
link it here. If you have an idea for an awesome thing to do with IPFS, a good
|
|
||||||
place to ask about it might be in [ipfs/apps](https://github.com/ipfs/apps) or
|
|
||||||
[ipfs/notes](https://github.com/ipfs/notes)._
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
- [Apps](#apps)
|
|
||||||
- [Single page Webapps](#single-page-webapps)
|
|
||||||
- [Tools](#tools)
|
|
||||||
- [Videos](#videos)
|
|
||||||
- [Archives](#archives)
|
|
||||||
- [Articles and Press](#articles-and-press)
|
|
||||||
- [Articles independently hosted on IPFS](#articles-independently-hosted-on-ipfs)
|
|
||||||
- [Discussions](#discussions)
|
|
||||||
- [Contribute](#contribute)
|
|
||||||
- [Want to hack on IPFS?](#want-to-hack-on-ipfs)
|
|
||||||
- [License](#license)
|
|
||||||
|
|
||||||
## Apps
|
|
||||||
|
|
||||||
* [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.
|
|
||||||
* [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. [GitHub](https://github.com/fazo96/ipfs-boards)
|
|
||||||
* [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://digix.global) - 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.
|
|
||||||
* [Ethlance](http://ethlance.com) - First completely decentralised job market platform built on Ethereum and IPFS. [Github](https://github.com/madvas/ethlance)
|
|
||||||
* [git-ipfs-rehost](https://github.com/whyrusleeping/git-ipfs-rehost) - A script to rehost your git repos in ipfs.
|
|
||||||
* [Global Upload](https://globalupload.io/) - File transportation service for IPFS, upload files to the future of distributed web.
|
|
||||||
* [HydrusNetwork](https://github.com/hydrusnetwork/hydrus) - A booru-style media tagging application with a multitude of features, recently added basic ipfs support.
|
|
||||||
* [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
|
|
||||||
* [IPFS Event Drop](https://github.com/travisperson/ipfs-event-drops) - An app that allows for improved visualization of ipfs events.
|
|
||||||
* [IPFS Drive](http://ipfs-drive.ydns.eu) - In browser file manager for IPFS. [GitHub](https://github.com/fazo96/ipfs-drive)
|
|
||||||
* [ipfs.ink](https://ipfs.ink) - Publish and render markdown essays to and from ipfs. [GitHub](https://github.com/kpcyrd/ipfs.ink)
|
|
||||||
* [ipfs-search](http://ipfs-search.com) - Search engine for files and directories on IPFS.
|
|
||||||
* [ipfs-share](https://github.com/rameshvarun/ipfs-share) - Pastebin/Image host/File sharing application
|
|
||||||
* [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
|
|
||||||
* [markup.rocks](https://github.com/davidar/markup.rocks) - Pandoc-based markup editor/previewer/converter, ported to IPFS. [Example](https://ipfs.io/ipfs/QmWPgJnUGLB1LPh9KMG9LEN4LVu5e17TwkEtcmTWdNn9V6/#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u)
|
|
||||||
* [NodeFort.io](https://www.nodefort.io) - Web-based IPFS node hosting service.
|
|
||||||
* [Orbit](https://github.com/haadcode/orbit) - Distributed, peer-to-peer chat application on IPFS.
|
|
||||||
* [Origin Protocol](https://demo.originprotocol.com/) - Distributed sharing economy marketplace with images, metadata, and ERC 725 data stored on IPFS. ([Gateway](https://ipfs.io/ipfs/QmWP28bNAJbkiKrXHAHzotKCvLyNragErycSYQQR9KiFby/#/)) [Github](https://github.com/OriginProtocol/demo-dapp)
|
|
||||||
* [Partyshare](https://partysha.re) - A simple file sharing app.
|
|
||||||
* [Philes](https://github.com/chrismatthieu/philes) - A simple browser-based IPFS notepad app.
|
|
||||||
* [Pathephone](https://pathephone.github.io) - Distributed music streaming app.
|
|
||||||
* [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.
|
|
||||||
* [Playback](https://mafintosh.github.io/playback/) - IPFS playback support. This allows casting a video in IPFS to a Chromecast.
|
|
||||||
* [PushToTalk](http://timothy.hobbs.cz/push-to-talk/index.html) - Push to Talk lets you edit audio essays and publish them with IPFS.
|
|
||||||
* [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.
|
|
||||||
* [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.
|
|
||||||
* [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.
|
|
||||||
* [ipfs-md-wiki](https://github.com/daijiale/ipfs-md-wiki) - Build your wiki system base on ipfs and markdown.
|
|
||||||
* [infura.io](https://infura.io) - A Infrastructure: use API and developer tools provide secure, reliable, and scalable access to Ethereum and IPFS to help build decentralized application easier.
|
|
||||||
* [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. [GitHub](https://github.com/textileio/textile-mobile)
|
|
||||||
|
|
||||||
### Single page Webapps
|
|
||||||
|
|
||||||
These are narrowly-scoped, little JS "apps" deployed through IPFS.
|
|
||||||
|
|
||||||
- [a markdown renderer](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/markdown-viewer) - [example](
|
|
||||||
https://ipfs.io/ipfs/QmSrCRJmzE4zE1nAfWPbzVfanKQNBhp7ZWmMnEdbiLvYNh/mdown#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u
|
|
||||||
)
|
|
||||||
- [a js video player](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/play) - [example](
|
|
||||||
https://ipfs.io/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse
|
|
||||||
)
|
|
||||||
- [a qr-code renderer](https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/qr-render) - [example](
|
|
||||||
https://ipfs.io/ipfs/QmccqhJg5wm5kNjAP4k4HrYxoqaXUGNuotDUqfvYBx8jrR/qr#enter%20text%20here
|
|
||||||
)
|
|
||||||
- [IPFessay](https://gitlab.com/stavros/IPFessay) - A simple way to publish uncensorable essays on IPFS.
|
|
||||||
- [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)
|
|
||||||
- [Gorilla REPL viewer](https://github.com/keorn/ipfs-gorilla-repl) - [example](https://ipfs.io/ipfs/QmRNUauWDvZFkAp1Bw3kAode3jT8aH2vx7LYzbS7H6R3Mg/view.html?path=/ipfs/QmbRdyLXiFWrKc5hW1NbvpUxF9tLovWCPgiz4BDhjD9k3j)
|
|
||||||
|
|
||||||
## 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. ([github](https://github.com/MidnightLightning/ethereum-blockwatch))
|
|
||||||
* [cachewarmer](https://github.com/BrendanBenshoof/cachewarmer) - Donate ipfs gateways to cache other people's content
|
|
||||||
* [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.
|
|
||||||
* [ipcat](https://github.com/noffle/ipcat) - :cat2: Retrieve IPFS object data and send it to stdout.
|
|
||||||
* [ipfs-chrome-station](https://github.com/fbaiodias/ipfs-chrome-station) - Chrome extension to redirect ipfs.io traffic to local gateway
|
|
||||||
* [ipfs-chrome-extension](https://github.com/dylanPowers/ipfs-chrome-extension) - Chrome extension to redirect ipfs.io traffic to local gateway
|
|
||||||
* [ipfs-companion](https://github.com/ipfs/ipfs-companion) - Firefox addon to provide access to IPFS via local gateway
|
|
||||||
* [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-paste](https://github.com/jbenet/ipfs-paste) - Paste stdin and clipboard to IPFS
|
|
||||||
* [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
|
|
||||||
* [ipget](https://github.com/ipfs/ipget) - :satellite: wget for IPFS: retrieve files over IPFS and save them locally.
|
|
||||||
* [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
|
|
||||||
* [Orion](https://github.com/Siderus/Orion) - KISS, Easy to setup and use IPFS node for macOS, Windows and Linux.
|
|
||||||
* [pinbot](https://github.com/whyrusleeping/pinbot) - Pin content via IRC
|
|
||||||
* [ipfs-mount](https://github.com/richardschneider/net-ipfs-mount) - Mount IPFS as a mapped drive on Windows
|
|
||||||
* [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-add-from-encrypted](https://github.com/TroyWilson1/ipfs-add-from-encrypted) - Encrypt a file or directory with AES256 then add to IPFS
|
|
||||||
|
|
||||||
## Videos
|
|
||||||
|
|
||||||
* [IPFS Alpha - Why we must redistribute the web](https://www.youtube.com/watch?v=skMTdSEaCtA) (YouTube)
|
|
||||||
* [Juan Benet at Stanford 2015](https://www.youtube.com/watch?v=HUVmypx9HGI) (YouTube)
|
|
||||||
* [Juan Benet at Fullstack Fest 2016](https://www.youtube.com/watch?v=jONZtXMu03w) (YouTube) ([IPFS Mirror](https://ipfs.io/ipfs/QmX8LDhDSYdX3xG6cHFUybXLDSuvo9Lz6wF5NU3UVmJRnB))
|
|
||||||
|
|
||||||
## Archives
|
|
||||||
|
|
||||||
## Articles and Press
|
|
||||||
|
|
||||||
* 2018-07-11: [On future-proof cryptographic hashes](https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/) (pascalprecht.github.io)
|
|
||||||
* 2017-06-13: [Decentralized & Distributed Edge Computing Comes to Computes.io](https://blog.computes.io/decentralized-distributed-edge-computing-comes-to-computes-io-396aa062bc85) (medium.com)
|
|
||||||
* 2017-03-31: [Using IPFS for IoT Communications](https://medium.com/@chrismatthieu/using-ipfs-for-iot-communications-b49c2139783a) (medium.com)
|
|
||||||
* 2016-09-12: [IPFS: The Internet Democratised](https://medium.com/@tonywillenberg/web-3-0-a-truly-democratised-internet-f4b06cb4077b) (medium.com)
|
|
||||||
* 2016-05-20: [Changelog Podcast](https://changelog.com/204/) (changelog.com)
|
|
||||||
* 2015-09-10: [First Steps Toward Implementing Distributed Permanent Web With IPFS](https://hacked.com/first-steps-toward-implementing-distributed-permanent-web-ipfs/) (Hacked.com)
|
|
||||||
* 2015-09-13: [Introduction to IPFS](http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example) (whatdoesthequantsay.com)
|
|
||||||
* 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) (Vice // Motherboard)
|
|
||||||
* 2015-11-01: [Eris + IPFS](https://monax.io/2015/11/01/eris-and-ipfs/) (archived at monax.io)
|
|
||||||
|
|
||||||
### Articles independently hosted on 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) (ipfs.io)
|
|
||||||
|
|
||||||
## Discussions
|
|
||||||
|
|
||||||
* [CRDTs discussion](https://github.com/ipfs/notes/issues/23)
|
|
||||||
|
|
||||||
## Contribute
|
|
||||||
|
|
||||||
Please add (or remove) stuff from this list if you see anything awesome! [Open an issue](https://github.com/ipfs/awesome-ipfs/issues) or a PR.
|
|
||||||
|
|
||||||
### 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)
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/)
|
|
5
ci/Jenkinsfile
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
website([
|
||||||
|
website: 'awesome.ipfs.io',
|
||||||
|
disable_publish: true,
|
||||||
|
record: '_dnslink.dev'
|
||||||
|
])
|
236
data/apps.yaml
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
title: Apps
|
||||||
|
color: aqua
|
||||||
|
description: Applications built with IPFS or with functionality that uses IPFS.
|
||||||
|
content:
|
||||||
|
- title: akasha
|
||||||
|
website: http://akasha.world/
|
||||||
|
description: >
|
||||||
|
A Next-Generation Social Media Network, powered by Ethereum and embedded
|
||||||
|
into IPFS.
|
||||||
|
- title: Alexandria
|
||||||
|
website: http://www.alexandria.io/learn/#integrated-technologies
|
||||||
|
description: >
|
||||||
|
Decentralized content publishing / monetization platform.
|
||||||
|
- title: Arbore
|
||||||
|
website: http://arbo.re
|
||||||
|
description: >
|
||||||
|
A friend-to-friend file-sharing app build on top of IPFS.
|
||||||
|
- title: beets
|
||||||
|
source: https://github.com/beetbox/beets
|
||||||
|
description: >
|
||||||
|
Beets has a plugin which allows for easy sharing of music libraries
|
||||||
|
using IPFS
|
||||||
|
- title: Blokaly
|
||||||
|
source: https://github.com/blokaly
|
||||||
|
description: >
|
||||||
|
A badge issuing, sharing and display platform based on IPFS.
|
||||||
|
- title: Boards
|
||||||
|
website: https://ipfs.io/ipns/boards.ydns.eu
|
||||||
|
source: https://github.com/fazo96/ipfs-boards
|
||||||
|
description: >
|
||||||
|
Distributed social platform that runs in the browser.
|
||||||
|
- title: Cohort
|
||||||
|
source: https://github.com/zignig/cohort
|
||||||
|
description: >
|
||||||
|
A golang app to preset a threejs interface and get all of its assets
|
||||||
|
out of IPFS.
|
||||||
|
- title: Computes
|
||||||
|
website: https://computes.io
|
||||||
|
picture: /images/computes.svg
|
||||||
|
description: >
|
||||||
|
Computes.io is a distributed supercomputer powered by IPFS.
|
||||||
|
- title: dapple
|
||||||
|
source: https://github.com/nexusdev/dapple
|
||||||
|
description: >
|
||||||
|
Dapple is a Solidity developer multitool designed to manage the growing
|
||||||
|
complexity of interconnected smart contract systems.
|
||||||
|
- title: digx
|
||||||
|
website: https://www.dgx.io/
|
||||||
|
description: >
|
||||||
|
Digix is an asset-tokenisation platform built on Ethereum and IPFS.
|
||||||
|
- title: dtube
|
||||||
|
website: https://d.tube
|
||||||
|
picture: /images/dtube.png
|
||||||
|
description: >
|
||||||
|
Distributed video sharing with steem.it intergrations, using ipfs for
|
||||||
|
backend storage.
|
||||||
|
- title: Ethlance
|
||||||
|
website: http://ethlance.com
|
||||||
|
source: https://github.com/madvas/ethlance
|
||||||
|
description: >
|
||||||
|
First completely decentralised job market platform built on Ethereum
|
||||||
|
and IPFS.
|
||||||
|
- title: git-ipfs-rehost
|
||||||
|
source: https://github.com/whyrusleeping/git-ipfs-rehost
|
||||||
|
description: >
|
||||||
|
A script to rehost your git repos in ipfs.
|
||||||
|
- title: Global Upload
|
||||||
|
website: https://globalupload.io/
|
||||||
|
description: >
|
||||||
|
File transportation service for IPFS, upload files to the future of
|
||||||
|
distributed web.
|
||||||
|
- title: HydrusNetwork
|
||||||
|
source: https://github.com/hydrusnetwork/hydrus
|
||||||
|
description: >
|
||||||
|
A booru-style media tagging application with a multitude of features,
|
||||||
|
recently added basic ipfs support.
|
||||||
|
- title: InterPlanetary Wayback
|
||||||
|
source: https://github.com/oduwsdl/ipwb
|
||||||
|
description: >
|
||||||
|
Web Archive (WARC) indexing and replay using IPFS.
|
||||||
|
- title: Interplanetary Wiki
|
||||||
|
source: https://github.com/jamescarlyle/ipfs-wiki
|
||||||
|
description: >
|
||||||
|
Wiki built on top of IPFS
|
||||||
|
- title: IPFS Event Drop
|
||||||
|
source: https://github.com/travisperson/ipfs-event-drops
|
||||||
|
description: >
|
||||||
|
An app that allows for improved visualization of ipfs events.
|
||||||
|
- title: IPFS Drive
|
||||||
|
website: http://ipfs-drive.ydns.eu
|
||||||
|
source: https://github.com/fazo96/ipfs-drive
|
||||||
|
description: >
|
||||||
|
In browser file manager for IPFS.
|
||||||
|
- title: ipfs.ink
|
||||||
|
website: https://ipfs.ink
|
||||||
|
source: https://github.com/kpcyrd/ipfs.ink
|
||||||
|
description: >
|
||||||
|
Publish and render markdown essays to and from ipfs.
|
||||||
|
- title: ipfs-search
|
||||||
|
website: http://ipfs-search.com
|
||||||
|
description: >
|
||||||
|
Search engine for files and directories on IPFS.
|
||||||
|
- title: ipfs-share
|
||||||
|
source: https://github.com/rameshvarun/ipfs-share
|
||||||
|
description: >
|
||||||
|
Pastebin/Image host/File sharing application
|
||||||
|
- title: ipfs.pics
|
||||||
|
source: https://github.com/ipfspics/ipfspics-server
|
||||||
|
description: >
|
||||||
|
Upload and share pics.
|
||||||
|
- title: IPFSBin
|
||||||
|
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
|
||||||
|
description: >
|
||||||
|
Pandoc-based markup editor/previewer/converter, ported to IPFS.
|
||||||
|
- title: Orbit
|
||||||
|
website: https://orbit.chat
|
||||||
|
source: https://github.com/haadcode/orbit
|
||||||
|
picture: /images/orbit.png
|
||||||
|
description: >
|
||||||
|
Distributed, peer-to-peer chat application on IPFS.
|
||||||
|
- title: Partyshare
|
||||||
|
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: >
|
||||||
|
IPFS playback support. This allows casting a video in IPFS to a Chromecast.
|
||||||
|
- title: PushToTalk
|
||||||
|
website: http://timothy.hobbs.cz/push-to-talk/index.html
|
||||||
|
description: >
|
||||||
|
Push to Talk lets you edit audio essays and publish them with IPFS.
|
||||||
|
- title: ujo
|
||||||
|
website: http://ujomusic.com/
|
||||||
|
description: >
|
||||||
|
A blockchain marketplace for musicians.
|
||||||
|
- title: uport
|
||||||
|
website: https://uport.me/#home
|
||||||
|
description: >
|
||||||
|
Uport is a mobile, self-sovereign identity and key management system,
|
||||||
|
built on the Ethereum blockchain.
|
||||||
|
- title: gogo.tattoo
|
||||||
|
website: http://gogo.tattoo
|
||||||
|
description: >
|
||||||
|
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.
|
||||||
|
- title: IPFessay
|
||||||
|
website: https://gitlab.com/stavros/IPFessay
|
||||||
|
description: >
|
||||||
|
A simple way to publish uncensorable essays on IPFS.
|
||||||
|
- title: Hardbin
|
||||||
|
source: https://github.com/jes/hardbin
|
||||||
|
description: >
|
||||||
|
Hardbin is an encrypted pastebin, with the decryption key passed in
|
||||||
|
the URL fragment
|
||||||
|
- title: hasteIPFS
|
||||||
|
website: https://ipfs.io/ipns/bin.ipfs.ovh/
|
||||||
|
description: >
|
||||||
|
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
|
||||||
|
source: https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/markdown-viewer
|
||||||
|
demo: https://ipfs.io/ipfs/QmSrCRJmzE4zE1nAfWPbzVfanKQNBhp7ZWmMnEdbiLvYNh/mdown#/ipfs/QmfQ75DjAxYzxMP2hdm6o4wFwZS5t7uorEZ2pX9AKXEg2u
|
||||||
|
- title: a js video player
|
||||||
|
source: https://github.com/ipfs/website/tree/master/content/docs/examples/webapps/play
|
||||||
|
demo: https://ipfs.io/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXs
|
||||||
|
- 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: Temporal
|
||||||
|
source: https://github.com/RTradeLtd/Temporal
|
||||||
|
description: >
|
||||||
|
Temporal is an easy to use API and platform for integrating IPFS and other
|
||||||
|
distributed/decentralized storage technologies into enterprise applications
|
||||||
|
- title: Textile Photos
|
||||||
|
website: https://www.textile.photos
|
||||||
|
source: https://github.com/textileio/textile-mobile
|
||||||
|
picture: /images/textilephotos.png
|
||||||
|
description: >
|
||||||
|
Textile Photos is a secure, mobile digital wallet for your photos.
|
||||||
|
- title: Pathephone
|
||||||
|
website: https://pathephone.github.io
|
||||||
|
description: Distributed music streaming app.
|
||||||
|
- title: Origin Protocol
|
||||||
|
website: https://demo.originprotocol.com/
|
||||||
|
source: https://github.com/OriginProtocol/demo-dapp
|
||||||
|
description: >
|
||||||
|
Distributed sharing economy marketplace with images, metadata, and ERC 725 data stored on IPFS.
|
||||||
|
- title: Philes
|
||||||
|
website: https://philes.co
|
||||||
|
source: https://github.com/chrismatthieu/philes
|
||||||
|
description: A simple browser-based IPFS notepad app.
|
||||||
|
- title: ipfs-md-wiki
|
||||||
|
source: https://github.com/daijiale/ipfs-md-wiki
|
||||||
|
description: Build your wiki system base on ipfs and markdown.
|
||||||
|
- title: infura.io
|
||||||
|
website: https://infura.io
|
||||||
|
picture: /images/infura.png
|
||||||
|
description: >
|
||||||
|
A Infrastructure: use API and developer tools provide secure, reliable, and
|
||||||
|
scalable access toEthereum and IPFS to help build decentralized application easier.
|
||||||
|
- title: NodeFort.io
|
||||||
|
website: https://www.nodefort.io
|
||||||
|
picture: /images/nodefort.png
|
||||||
|
description: Web-based IPFS node hosting service.
|
||||||
|
- title: OpenBazaar
|
||||||
|
website: https://www.openbazaar.org/
|
||||||
|
description: >
|
||||||
|
This new version(v2.0) is built on IPFS, Openbazaar stores can now be accessible
|
||||||
|
to buyers even when they are offline.
|
36
data/articles.yaml
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
title: Articles
|
||||||
|
color: navy
|
||||||
|
description: Articles about the decentralized web and IPFS.
|
||||||
|
content:
|
||||||
|
- title: Decentralized & Distributed Edge Computing Comes to Computes.io
|
||||||
|
date: '2017-06-13'
|
||||||
|
website: https://blog.computes.io/decentralized-distributed-edge-computing-comes-to-computes-io-396aa062bc85
|
||||||
|
- title: Using IPFS for IoT Communications
|
||||||
|
date: '2017-03-31'
|
||||||
|
website: https://medium.com/@chrismatthieu/using-ipfs-for-iot-communications-b49c2139783a
|
||||||
|
- title: 'IPFS: The Internet Democratised'
|
||||||
|
date: '2016-09-12'
|
||||||
|
website: https://medium.com/@tonywillenberg/web-3-0-a-truly-democratised-internet-f4b06cb4077b
|
||||||
|
- title: Changelog Podcast
|
||||||
|
date: '2016-05-20'
|
||||||
|
website: https://changelog.com/204/
|
||||||
|
- title: First Steps Toward Implementing Distributed Permanent Web With IPFS
|
||||||
|
date: '2015-09-10'
|
||||||
|
website: https://hacked.com/first-steps-toward-implementing-distributed-permanent-web-ipfs/
|
||||||
|
- title: Introduction to IPFS
|
||||||
|
date: '2015-09-13'
|
||||||
|
website: http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example
|
||||||
|
- 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/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
|
||||||
|
- title: Downloading nodejs versions with nvm/n over IPFS
|
||||||
|
website: https://ipfs.io/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D/example#/ipfs/QmUx363UFtgiQqkHHsPK3TSDmwoALDo2hrbMWbcxjH2vFc
|
||||||
|
- title: On future-proof cryptographic hashes
|
||||||
|
date: '2018-07-11'
|
||||||
|
website: https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/
|
79
data/tools.yaml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
title: Tools
|
||||||
|
color: yellow
|
||||||
|
description: Tools built on the top of IPFS.
|
||||||
|
content:
|
||||||
|
- title: cachewarmer
|
||||||
|
source: https://github.com/BrendanBenshoof/cachewarmer
|
||||||
|
description: Donate ipfs gateways to cache other people's content
|
||||||
|
- title: git-remote-ipfs
|
||||||
|
source: https://github.com/cryptix/git-remote-ipfs
|
||||||
|
description: push/pull repositories from/to IPFS
|
||||||
|
- title: http2ipfs
|
||||||
|
source: https://github.com/jbenet/http2ipfs-web
|
||||||
|
description: This is a simple webtool to add URLs to an IPFS node.
|
||||||
|
- title: ipcat
|
||||||
|
source: https://github.com/noffle/ipcat
|
||||||
|
description: ":cat2: Retrieve IPFS object data and send it to stdout."
|
||||||
|
- title: ipfs-chrome-station
|
||||||
|
source: https://github.com/fbaiodias/ipfs-chrome-station
|
||||||
|
description: Chrome extension to redirect ipfs.io traffic to local gateway
|
||||||
|
- title: ipfs-chrome-extension
|
||||||
|
source: https://github.com/dylanPowers/ipfs-chrome-extension
|
||||||
|
description: Chrome extension to redirect ipfs.io traffic to local gateway
|
||||||
|
- title: ipfs-companion
|
||||||
|
source: https://github.com/ipfs/ipfs-companion
|
||||||
|
picture: /images/companion.png
|
||||||
|
description: Browser extension that simplifies access to IPFS resources.
|
||||||
|
- 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
|
||||||
|
- title: ipfs-screencap
|
||||||
|
source: https://github.com/jbenet/ipfs-screencap
|
||||||
|
description: Capture screenshots, publish them to IPFS, and copy the link to the
|
||||||
|
clipboard.
|
||||||
|
- title: ipfscrape
|
||||||
|
source: https://github.com/victorbjelkholm/ipfscrape
|
||||||
|
description: Scrape a webpage with all assets and put it in IPFS
|
||||||
|
- title: ipget
|
||||||
|
source: https://github.com/ipfs/ipget
|
||||||
|
description: ":satellite: wget for IPFS: retrieve files over IPFS and save them
|
||||||
|
locally."
|
||||||
|
- title: IPRedirect
|
||||||
|
source: https://github.com/JayBrown/IPRedirect
|
||||||
|
description: 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.
|
||||||
|
- title: ipscend
|
||||||
|
source: https://github.com/diasdavid/ipscend
|
||||||
|
description: Tool for hosting web apps and static websites in IPFS
|
||||||
|
- title: pinbot
|
||||||
|
source: https://github.com/whyrusleeping/pinbot
|
||||||
|
description: Pin content via IRC
|
||||||
|
- title: ipfs-mount
|
||||||
|
source: https://github.com/richardschneider/net-ipfs-mount
|
||||||
|
description: Mount IPFS as a mapped drive on Windows
|
||||||
|
- 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
|
||||||
|
- title: Orion
|
||||||
|
picture: /images/orion.png
|
||||||
|
source: https://github.com/Siderus/Orion
|
||||||
|
description: KISS, Easy to setup and use IPFS node for macOS, Windows and Linux.
|
||||||
|
- title: ipfsecret
|
||||||
|
source: https://github.com/c2fo-lab/ipfsecret
|
||||||
|
description: Encrypt and decrypt IPFS files with a secret passphrase
|
||||||
|
- title: ipfs-add-from-encrypted
|
||||||
|
source: https://github.com/TroyWilson1/ipfs-add-from-encrypted
|
||||||
|
description: Encrypt a file or directory with AES256 then add to IPFS
|
10
data/videos.yaml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
title: Videos
|
||||||
|
color: red
|
||||||
|
description: Videos about IPFS.
|
||||||
|
content:
|
||||||
|
- title: IPFS Alpha - Why we must redistribute the web
|
||||||
|
website: https://www.youtube.com/watch?v=skMTdSEaCtA
|
||||||
|
- title: Juan Benet at Stanford 2015
|
||||||
|
website: https://www.youtube.com/watch?v=HUVmypx9HGI
|
||||||
|
- title: Juan Benet at Fullstack Fest 2016
|
||||||
|
website: https://www.youtube.com/watch?v=jONZtXMu03w
|
47
package.json
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"name": "awesome-ipfs",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ipfs-css": "^0.5.2",
|
||||||
|
"lunr": "^2.3.0",
|
||||||
|
"tachyons": "^4.10.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "node ./scripts/dev.js",
|
||||||
|
"lint": "standard",
|
||||||
|
"deploy": "npm run build && ipfs add -r -Q ./public",
|
||||||
|
"build": "run-s build:*",
|
||||||
|
"build:readme": "node ./scripts/make-readme.js",
|
||||||
|
"build:fonts": "shx mkdir -p src/static/fonts && shx cp node_modules/ipfs-css/fonts/* src/static/fonts",
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"shx": "^0.3.2",
|
||||||
|
"standard": "^11.0.1",
|
||||||
|
"uglifyify": "^5.0.1",
|
||||||
|
"watch": "^1.0.2"
|
||||||
|
},
|
||||||
|
"standard": {
|
||||||
|
"parser": "babel-eslint"
|
||||||
|
},
|
||||||
|
"author": "Protocol Labs, Inc.",
|
||||||
|
"license": "MIT",
|
||||||
|
"homepage": "."
|
||||||
|
}
|
23
scripts/data.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const yaml = require('node-yaml')
|
||||||
|
const { sortAbc } = require('./utils')
|
||||||
|
const dataDir = path.join(__dirname, '../data')
|
||||||
|
|
||||||
|
const trimIfExists = (str) => str ? str.trim() : undefined
|
||||||
|
|
||||||
|
const files = fs.readdirSync(dataDir)
|
||||||
|
.map(file => path.join(dataDir, file))
|
||||||
|
.map(file => yaml.readSync(file))
|
||||||
|
.map(file => {
|
||||||
|
file.content = file.content.map(({ title, description, ...file }) => ({
|
||||||
|
title: trimIfExists(title),
|
||||||
|
description: trimIfExists(description),
|
||||||
|
...file
|
||||||
|
}))
|
||||||
|
|
||||||
|
return file
|
||||||
|
})
|
||||||
|
.sort((a, b) => sortAbc(a.title, b.title))
|
||||||
|
|
||||||
|
module.exports = files
|
60
scripts/dev.js
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
const chokidar = require('chokidar')
|
||||||
|
const path = require('path')
|
||||||
|
const runAll = require('npm-run-all')
|
||||||
|
const dataFolder = path.join(__dirname, '../data')
|
||||||
|
const srcFolder = path.join(__dirname, '../src')
|
||||||
|
const cssPath = path.join(__dirname, '../src/css')
|
||||||
|
const jsPath = path.join(__dirname, '../src/js')
|
||||||
|
const http = require('http')
|
||||||
|
|
||||||
|
const runHugo = () => runAll(['build:hugo'])
|
||||||
|
|
||||||
|
const handler = (path) => {
|
||||||
|
if (path.startsWith(dataFolder)) {
|
||||||
|
runAll(['build:data'], {parallel: false}).then(runHugo)
|
||||||
|
} else if (path.startsWith(cssPath)) {
|
||||||
|
runAll(['build:css'], {parallel: false}).then(runHugo)
|
||||||
|
} else if (path.startsWith(jsPath)) {
|
||||||
|
runAll(['build:js'], {parallel: false}).then(runHugo)
|
||||||
|
} else {
|
||||||
|
runHugo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function run () {
|
||||||
|
console.log('Preparing fonts, css, js and data...')
|
||||||
|
await runAll(['build:fonts', 'build:css', 'build:js', 'build:data'], {parallel: true})
|
||||||
|
console.log('Running Hugo once...')
|
||||||
|
await runHugo()
|
||||||
|
|
||||||
|
console.log('Starting server...')
|
||||||
|
|
||||||
|
const ecstatic = require('ecstatic')({
|
||||||
|
root: `${__dirname}/../public`,
|
||||||
|
showDir: true,
|
||||||
|
autoIndex: true
|
||||||
|
})
|
||||||
|
|
||||||
|
http.createServer(ecstatic).listen(8080)
|
||||||
|
|
||||||
|
const watcher = chokidar.watch([dataFolder, srcFolder], {
|
||||||
|
ignored: (string) => string.indexOf('src/content') !== -1 ||
|
||||||
|
string.indexOf('src/data') !== -1 ||
|
||||||
|
string.indexOf('src/resources') !== -1 ||
|
||||||
|
string.indexOf('src/layouts/partials/indexes') !== -1 ||
|
||||||
|
string.indexOf('src/static/fonts') !== -1 ||
|
||||||
|
string.indexOf('src/static/app.css') !== -1 ||
|
||||||
|
string.indexOf('src/static/app.js') !== -1,
|
||||||
|
persistent: true,
|
||||||
|
ignoreInitial: true,
|
||||||
|
awaitWriteFinish: true
|
||||||
|
})
|
||||||
|
|
||||||
|
watcher
|
||||||
|
.on('ready', () => console.log('Listening on :8080'))
|
||||||
|
.on('add', handler)
|
||||||
|
.on('change', handler)
|
||||||
|
.on('unlink', handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
run()
|
130
scripts/make-data.js
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
const lunr = require('lunr')
|
||||||
|
const fs = require('fs-extra')
|
||||||
|
const path = require('path')
|
||||||
|
const { slugify, capitalize, sortAbc } = require('./utils')
|
||||||
|
|
||||||
|
const dataDir = path.join(__dirname, '../src/data')
|
||||||
|
const contentDir = path.join(__dirname, '../src/content')
|
||||||
|
const indexesDir = path.join(__dirname, '../src/layouts/partials/indexes')
|
||||||
|
|
||||||
|
const processDataType = (data) => {
|
||||||
|
const content = data.content.map((info, index) => {
|
||||||
|
const { website, ...more } = info
|
||||||
|
|
||||||
|
if (data.title === 'Videos' && website.includes('youtube')) {
|
||||||
|
more.youtube = website.replace('https://www.youtube.com/watch?v=', '')
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
website: website,
|
||||||
|
categories: [data.title.toLowerCase()],
|
||||||
|
...more
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
delete data.content
|
||||||
|
|
||||||
|
return {
|
||||||
|
info: { ...data },
|
||||||
|
content: content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = []}) => ({
|
||||||
|
ref: index,
|
||||||
|
data: `${title} ${description} ${tags.join(' ')} ${categories.join(' ')}`
|
||||||
|
}))
|
||||||
|
|
||||||
|
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, `<script>var idx = JSON.parse(\`${json}\`);</script>`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const process = () => {
|
||||||
|
fs.ensureDirSync(dataDir)
|
||||||
|
fs.ensureDirSync(contentDir)
|
||||||
|
fs.ensureDirSync(indexesDir)
|
||||||
|
fs.emptyDirSync(dataDir)
|
||||||
|
fs.emptyDirSync(contentDir)
|
||||||
|
fs.emptyDirSync(indexesDir)
|
||||||
|
|
||||||
|
let data = []
|
||||||
|
let types = []
|
||||||
|
let typesObj = {}
|
||||||
|
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
|
||||||
|
process()
|
49
scripts/make-readme.js
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
const fs = require('fs')
|
||||||
|
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 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 => {
|
||||||
|
let block = '- '
|
||||||
|
let mainUrl = ''
|
||||||
|
|
||||||
|
if (item.website) {
|
||||||
|
mainUrl = item.website
|
||||||
|
} else if (item.source) {
|
||||||
|
mainUrl = item.source
|
||||||
|
} else if (item.demo) {
|
||||||
|
mainUrl = item.demo
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.date) block += item.date + ': '
|
||||||
|
block += `[${item.title}](${mainUrl}) `
|
||||||
|
if (item.description) block += `- ${item.description.trim()}`
|
||||||
|
if (item.demo && mainUrl !== item.demo) {
|
||||||
|
if (!item.description) block += '-'
|
||||||
|
block += ` [Demo](${item.demo})`
|
||||||
|
}
|
||||||
|
if (item.source && mainUrl !== item.source) {
|
||||||
|
block += ` [Source](${item.source})`
|
||||||
|
}
|
||||||
|
|
||||||
|
return block
|
||||||
|
}).join('\n')
|
||||||
|
|
||||||
|
return `## ${category.title}\n\n${content}`
|
||||||
|
}).join('\n\n')
|
||||||
|
|
||||||
|
fs.writeFileSync(readme, fs.readFileSync(template)
|
||||||
|
.toString()
|
||||||
|
.replace('#PLACEHOLDER_TOC#', toc)
|
||||||
|
.replace('#PLACEHOLDER_CATEGORIES#', sections))
|
40
scripts/readme-template.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# Awesome IPFS [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
|
||||||
|
|
||||||
|
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io)
|
||||||
|
[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/)
|
||||||
|
[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)
|
||||||
|
|
||||||
|
> Useful resources for using [IPFS](https://ipfs.io) and building things on top of it
|
||||||
|
|
||||||
|
_This list is for projects, tools, or pretty much any things related to IPFS that
|
||||||
|
are totally_ **awesome**_. This is for products which are already awesome - if
|
||||||
|
you have plans for cool stuff to do with IPFS, you should build it, and then
|
||||||
|
link it here. If you have an idea for an awesome thing to do with IPFS, a good
|
||||||
|
place to ask about it might be in [ipfs/apps](https://github.com/ipfs/apps) or
|
||||||
|
[ipfs/notes](https://github.com/ipfs/notes)._
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
#PLACEHOLDER_TOC#
|
||||||
|
- [Discussions](#discussions)
|
||||||
|
- [Contribute](#contribute)
|
||||||
|
- [Want to hack on IPFS?](#want-to-hack-on-ipfs)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
#PLACEHOLDER_CATEGORIES#
|
||||||
|
|
||||||
|
## Discussions
|
||||||
|
|
||||||
|
* [CRDTs discussion](https://github.com/ipfs/notes/issues/23)
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
Please add (or remove) stuff from this list if you see anything awesome! [Open an issue](https://github.com/ipfs/awesome-ipfs/issues) or a PR.
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/)
|
31
scripts/utils.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
const sort = (a, b) => {
|
||||||
|
if (a < b) return -1
|
||||||
|
if (a > b) return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortInv = (a, b) => -sort(a, b)
|
||||||
|
|
||||||
|
const sortAbc = (a, b) => {
|
||||||
|
a = a.toLowerCase()
|
||||||
|
b = b.toLowerCase()
|
||||||
|
return sort(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
const slugify = (text) => text.toString()
|
||||||
|
.toLowerCase()
|
||||||
|
.replace(/\s+/g, '-')
|
||||||
|
.replace(/[^\w-]+/g, '')
|
||||||
|
.replace(/--+/g, '-')
|
||||||
|
.replace(/^-+/, '')
|
||||||
|
.replace(/-+$/, '')
|
||||||
|
|
||||||
|
const capitalize = (text) => `${text.charAt(0).toUpperCase()}${text.slice(1).toLowerCase()}`
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
sort,
|
||||||
|
sortInv,
|
||||||
|
sortAbc,
|
||||||
|
slugify,
|
||||||
|
capitalize
|
||||||
|
}
|
11
src/config.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
baseurl: ''
|
||||||
|
relativeurls: true
|
||||||
|
languageCode: en
|
||||||
|
pluralizelisttitles: false
|
||||||
|
removePathAccents: true
|
||||||
|
title: Awesome IPFS
|
||||||
|
|
||||||
|
params:
|
||||||
|
Description: >-
|
||||||
|
Useful resources for using IPFS and building things on top of it
|
||||||
|
image: /images/banner.png
|
35
src/css/app.css
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
@import "../../node_modules/tachyons/css/tachyons.css";
|
||||||
|
@import "../../node_modules/ipfs-css/ipfs.css";
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: url('./images/starfield.png') no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
background-attachment: fixed;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grow2 {
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
backface-visibility: hidden;
|
||||||
|
transform: translateZ(0);
|
||||||
|
transition: transform 0.25s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grow2:active,
|
||||||
|
.grow2:hover,
|
||||||
|
.grow2:focus {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.focus-outline:focus {
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: 0 0 0 .2rem rgba(201, 210, 215, .4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt-auto {
|
||||||
|
margin-top: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fill-blue {
|
||||||
|
fill: #357edd;
|
||||||
|
}
|
50
src/js/app.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
const lunr = require('lunr')
|
||||||
|
const idx = lunr.Index.load(window.idx)
|
||||||
|
const search = document.getElementById('search')
|
||||||
|
|
||||||
|
const cards = Array.from(document.querySelectorAll('.Card'))
|
||||||
|
.sort((a, b) => {
|
||||||
|
const aId = parseInt(a.dataset.ref)
|
||||||
|
const bId = parseInt(b.dataset.ref)
|
||||||
|
|
||||||
|
if (aId < bId) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if (aId > bId) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
|
function update (display) {
|
||||||
|
cards.forEach((c) => {
|
||||||
|
if (display.indexOf(c.dataset.ref) >= 0) {
|
||||||
|
c.classList.remove('dn')
|
||||||
|
c.classList.add('flex')
|
||||||
|
} else {
|
||||||
|
c.classList.add('dn')
|
||||||
|
c.classList.remove('flex')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (search) {
|
||||||
|
search.classList.remove('dn')
|
||||||
|
const input = search.querySelector('input')
|
||||||
|
|
||||||
|
input.addEventListener('keyup', () => {
|
||||||
|
const search = input.value
|
||||||
|
|
||||||
|
if (search === '') {
|
||||||
|
cards.forEach((c) => c.classList.remove('dn'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
update(idx.search(search).map(s => s.ref))
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
35
src/layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ .Site.LanguageCode }}">
|
||||||
|
<head>
|
||||||
|
{{ partial "head" . }}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="charcoal sans-serif w-90 mw8 center">
|
||||||
|
<nav class="mh2 montserrat mv4 fw6 flex-wrap ttu tracked sans-serif flex flex-between">
|
||||||
|
<a href="{{ .Site.BaseURL }}/" class="w-100 w-auto-l flex items-center pv3 pv0-l flex-grow-1 flex items-center justify-center justify-start-l no-underline" >
|
||||||
|
<img alt="IPFS" src="{{ .Site.BaseURL }}/images/logo.png" class="w3 h3 mr3">
|
||||||
|
<h1 class="f3 white">Awesome IPFS</h1>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{{ $site := .Site }}
|
||||||
|
{{ range $name, $taxonomy := .Site.Taxonomies.categories }}
|
||||||
|
{{ $color := (index $site.Data.categories $name).color }}
|
||||||
|
<a href="/categories/{{ $name | urlize }}"
|
||||||
|
class="flex-grow-1 flex items-center justify-center white no-underline pa3 bg-animate dib bg-{{ $color }}-muted hover-bg-{{ $color }}">
|
||||||
|
{{ $name }}
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{ template "main" . }}
|
||||||
|
|
||||||
|
<footer class="mv4 mh2 montserrat ttu tc gray">
|
||||||
|
<a target="_blank" href="https://github.com/ipfs/awesome-ipfs" class="gray no-underline">GitHub</a> |
|
||||||
|
<a target="_blank" href="https://github.com/ipfs/awesome-ipfs/blob/static-site/CONTRIBUTING.md" class="gray no-underline"> Suggest a new item</a> |
|
||||||
|
<a target="_blank" href="https://discuss.ipfs.io/c/ecosystem" class="gray no-underline">Discuss</a>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<script src='{{ .Site.BaseURL }}/app.js'></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
9
src/layouts/_default/list.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
|
||||||
|
{{- $p1 := (print .Data.Plural "_") -}}
|
||||||
|
{{- $p2 := lower .Title -}}
|
||||||
|
{{- $partial := print $p1 $p2 -}}
|
||||||
|
{{- partial "list" .Data.Pages -}}
|
||||||
|
{{- partial (print "indexes/" $partial) -}}
|
||||||
|
|
||||||
|
{{ end }}
|
7
src/layouts/_default/terms.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
|
||||||
|
<main class="mv4 mh2">
|
||||||
|
TODO
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{{ end }}
|
7
src/layouts/index.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
|
||||||
|
{{ partial "list" .Pages }}
|
||||||
|
{{ partial "indexes/index" }}
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
28
src/layouts/partials/head.html
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{{- $title := or .Title .Site.Title -}}
|
||||||
|
{{- $description := or .Description .Site.Params.Description -}}
|
||||||
|
{{- $image := print .Site.BaseURL (or .Params.image .Site.Params.Image) -}}
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{{ $title }}</title>
|
||||||
|
<meta name="description" content="{{ $description }}">
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary_large_image"/>
|
||||||
|
<meta name="twitter:title" content="{{ $title }}"/>
|
||||||
|
<meta name="twitter:description" content="{{ $description }}"/>
|
||||||
|
<meta name="twitter:image:src" content="{{ $image }}"/>
|
||||||
|
|
||||||
|
<meta property="og:locale" content="{{ .Site.LanguageCode }}" />
|
||||||
|
<meta property="og:title" content="{{ $title }}" />
|
||||||
|
<meta property="og:description" content="{{ $description }}" />
|
||||||
|
<meta property="og:url" content="{{ .Permalink }}" />
|
||||||
|
<meta property="og:site_name" content="{{ .Site.Title }}" />
|
||||||
|
<meta property="og:image" content="{{ $image }}" />
|
||||||
|
|
||||||
|
<meta name="msapplication-TileColor" content="#0b3a53">
|
||||||
|
<meta name="theme-color" content="#0b3a53">
|
||||||
|
<link rel="manifest" href="{{ .Site.BaseURL }}/manifest.json">
|
||||||
|
<link rel="shortcut icon" href="{{ .Site.BaseURL }}/favicon.ico">
|
||||||
|
<link rel="stylesheet" href="{{ .Site.BaseURL }}/app.css" >
|
1
src/layouts/partials/icons/code.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg class="w1 h1 mr2 fill-blue" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"/></svg>
|
After Width: | Height: | Size: 649 B |
1
src/layouts/partials/icons/flask.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg class="w1 h1 mr2 fill-blue" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"/></svg>
|
After Width: | Height: | Size: 407 B |
1
src/layouts/partials/icons/globe.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg class="w1 h1 mr2 fill-blue" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"/></svg>
|
After Width: | Height: | Size: 847 B |
78
src/layouts/partials/list.html
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
{{ define "text" }}
|
||||||
|
<p class="f6 lh-copy mw5 mt2 mb0 mid-gray">
|
||||||
|
{{- . -}}
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<div class="ma2 dn" id="search">
|
||||||
|
<input
|
||||||
|
placeholder="Find your awesome app..."
|
||||||
|
class="input-reset outline-0 bn pa3 mb2 db w-100 center focus-outline dn"
|
||||||
|
type="text" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<main class="mv4 flex flex-wrap justify-between" >
|
||||||
|
{{ range (sort . "Params.index") -}}
|
||||||
|
<article data-ref="{{ .Params.index }}" class="Card flex flex-column bg-white shadow-4 grow2 br1 dark-gray b--black-10 flex-grow-1 ma2">
|
||||||
|
{{ $cat := index .Params.categories 0 }}
|
||||||
|
{{ $color := (index .Site.Data.categories $cat).color }}
|
||||||
|
<div class="bg-navy ttu fw6 tracked montserrat bg-{{ $color }}-muted br1 br--top white pv1 ph2 ph3-ns f7 b w-100">
|
||||||
|
{{ humanize $cat }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pa2 ph3-ns pb3-ns flex flex-column flex-grow-1">
|
||||||
|
<div class="dt w-100 mt1">
|
||||||
|
<div class="dtc">
|
||||||
|
<a target="_blank" class="no-underline charcoal" href="{{ if .Params.website }}{{ .Params.website }}{{ else if .Params.source }}{{ .Params.source }}{{ else if .Params.demo }}{{ .Params.demo }}{{ end }}">
|
||||||
|
<h1 class="f5 mw5 f4-ns mv0">{{- .Title -}}</h1>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{- if isset .Params "date" -}}
|
||||||
|
{{ template "text" .Date.Format "January 2, 2006" }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if isset .Params "description" -}}
|
||||||
|
{{ template "text" .Params.description }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if isset .Params "picture" -}}
|
||||||
|
<div class="mt2 mw5">
|
||||||
|
<img class="br2" src="{{ .Site.BaseURL }}{{ .Params.picture }}" >
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- if isset .Params "youtube" -}}
|
||||||
|
<div class="relative mt2 mw5" style="height: 0; padding-bottom: 56.25%">
|
||||||
|
<iframe class="absolute top-0 left-0 w-100 h-100"
|
||||||
|
type="text/html"
|
||||||
|
src="https://www.youtube.com/embed/{{ .Params.youtube }}"
|
||||||
|
allowfullscreen
|
||||||
|
frameborder="0"></iframe>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<div class="flex pt2 mt-auto align-center justify-begin">
|
||||||
|
{{- if isset .Params "website" -}}
|
||||||
|
<a href="{{ .Params.website }}" target="_blank" alt="Website" title="Website">
|
||||||
|
{{ partial "icons/globe.svg" }}
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if isset .Params "source" -}}
|
||||||
|
<a href="{{ .Params.source }}" target="_blank" alt="Source Code" title="Source Code">
|
||||||
|
{{ partial "icons/code.svg" }}
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if isset .Params "demo" -}}
|
||||||
|
<a href="{{ .Params.demo }}" target="_blank" alt="Demo" title="Demo">
|
||||||
|
{{ partial "icons/flask.svg" }}
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</main>
|
BIN
src/static/favicon.ico
Normal file
After Width: | Height: | Size: 361 KiB |
BIN
src/static/images/banner.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
src/static/images/companion.png
Normal file
After Width: | Height: | Size: 126 KiB |
1
src/static/images/computes.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1922" height="400" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><path d="M156.083 244.045l33.654 33.653c-19.78 18.749-45.942 30.093-75.474 30.093C49.151 307.791.259 252.639.259 184.684c0-67.965 48.638-119.326 113.75-119.326 27.264 0 51.702 9.015 70.896 24.473l-34.127 34.127c-10.031-6.932-22.338-10.879-36.394-10.879-39.457 0-65.61 31.098-65.61 72.288 0 41.181 26.153 74.563 65.61 74.563 16.64 0 30.845-5.933 41.699-15.885z" fill="#8C63FF"/><path fill="#4A4A4A" d="M248.153 220.07l-45.444 45.444-34.162-34.16 45.444-45.446-50.004-50.004 34.162-34.153 49.996 49.996 49.776-49.777 34.162 34.163-49.777 49.775 45.216 45.217-34.152 34.162z"/><path d="M495.593 184.684c0 67.955-48.736 123.107-113.847 123.107-29.559 0-55.781-11.362-75.598-30.137l33.733-33.732c10.958 10.021 25.277 16.008 41.986 16.008 39.457 0 65.199-33.383 65.199-74.563 0-41.19-25.742-72.288-65.199-72.288-14.127 0-26.556 3.991-36.683 11.002l-34.346-34.347c19.116-15.404 43.439-24.376 70.652-24.376 65.113-.001 114.103 51.361 114.103 119.326zM796.37 136.184c-6.547-13.276-17.82-22.03-30.634-22.03-20.219 0-40.402 21.917-40.402 48.901l.14 125.786h-47.265V145.365c-5.322-18.23-18.6-31.141-34.136-31.141-20.219 0-40.263 21.881-40.263 48.875V288.84l-47.265.001V76.15h47.265v17.443c13.996-14.196 33.69-23.134 53.4-23.134 23.257 0 43.72 12.438 55.563 31.257 14.415-18.818 38.563-31.257 62.738-31.257 34.373 0 62.862 25.13 68.122 58.014v160.368l-47.265-.001V136.184h.002zM959.171 155.782v53.96c9.277 25.085 31.089 42.696 56.507 42.696 33.829 0 61.261-31.196 61.261-69.689 0-38.485-27.432-69.681-61.261-69.681-25.435 0-47.246 17.62-56.507 42.714zm0 109.128V400h-47.265V76.15h47.265v24.445c17.61-18.669 41.251-30.091 67.229-30.091 54.503 0 98.678 50.258 98.678 112.244 0 61.995-44.175 112.254-98.678 112.254-25.986.001-49.619-11.422-67.229-30.092zM1358.294 76.15v130.345c0 49.348-39.973 89.348-89.32 89.348-49.347 0-89.234-40-89.234-89.348V76.15h47.265v132.97c0 23.239 18.767 42.084 42.014 42.084 23.246 0 42.013-18.845 42.013-42.084V76.15h47.262zM1466.828 123.415v165.426h-47.265V123.415h-22.756V77.024h22.756V0h47.265v77.024h38.512v46.391zM1580.569 194.312c4.43 31.921 26.583 56.166 58.249 56.166 26.259 0 48.832-16.657 58.836-40.534l38.03 21.821c-17.505 38.03-54.318 64.228-96.971 64.228-59.632 0-104.419-51.213-104.419-114.373 0-63.168 44.865-110.869 104.497-110.869s97.619 47.701 97.619 110.869v12.692h-155.841zm110.478-42.888c-8.866-21.243-27.37-35.16-52.229-35.16-24.848 0-43.842 13.907-53.015 35.16h105.244zM1921.348 219.125c2.556 23.178-7.483 46.984-26.188 62.109-11.3 9.139-27.887 14.171-44.779 14.171-6.494 0-13.041-.744-19.344-2.284-24.998-6.109-45.006-23.781-56.35-49.76l40.778-17.803c5.821 13.33 14.608 21.522 26.127 24.332 11.702 2.862 22.433-.708 25.585-3.256 7.037-5.699 10.853-14.371 9.942-22.651-.472-4.29-2.478-10.109-9.348-13.522-2.521-1.253-4.911-2.434-7.212-3.572-12.35-6.117-23.02-11.396-41.131-21.146-19.604-10.555-31.719-27.527-34.117-47.799-2.275-19.229 4.92-38.87 18.784-51.265 14.976-13.399 34.94-18.687 54.774-14.511 22.705 4.778 42.311 20.962 52.446 43.281l-40.517 18.397c-4.244-9.339-12.324-16.288-21.094-18.134-6.084-1.279-11.449.112-15.948 4.139-2.599 2.319-4.894 7.484-4.253 12.859.656 5.609 4.367 10.266 11.02 13.846 17.443 9.392 27.291 14.275 39.771 20.445 2.32 1.148 4.728 2.337 7.273 3.607 19.128 9.497 31.444 27.187 33.781 48.517z" fill="#4A4A4A"/></g></svg>
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src/static/images/dtube.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
src/static/images/infura.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
src/static/images/logo.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
src/static/images/nodefort.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
src/static/images/orbit.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
src/static/images/orion.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
src/static/images/starfield.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
src/static/images/textilephotos.png
Normal file
After Width: | Height: | Size: 180 KiB |
15
src/static/manifest.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"short_name": "Awesome IPFS",
|
||||||
|
"name": "Awesome IPFS",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
|
"type": "image/x-icon"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": "./index.html",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#0b3a53",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
2
src/static/robots.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|