1
0
Fork 0
mirror of https://github.com/ipfs/awesome-ipfs.git synced 2024-11-20 11:28:35 -05:00

feat: awesome ipfs website

This commit is contained in:
Henrique Dias 2018-04-23 15:22:21 +01:00
parent b26e566cb0
commit 5304c279f5
43 changed files with 1068 additions and 161 deletions

32
.gitignore vendored Normal file
View 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

View file

@ -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.
- If you just created something, wait at least a couple of weeks before submitting.
- 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.`
- New categories, or improvements to the existing categorization are welcome.
- 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.
- 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.
- 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.
Thank you for your suggestions!

6
Makefile Normal file
View file

@ -0,0 +1,6 @@
build:
npm --version
node --version
npm install
npm run lint
npm run build

159
README.md
View file

@ -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 hasnt 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
View file

@ -0,0 +1,5 @@
website([
website: 'awesome.ipfs.io',
disable_publish: true,
record: '_dnslink.dev'
])

236
data/apps.yaml Normal file
View 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
View 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
View 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
View 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

View file

@ -85,4 +85,4 @@ inside `data/`
We will have a `featured` flag which will put those items at the top.
However, we need to ensure that Hugo sorts the same way always and might want
some other metrics for ranking, like the `state` of the project or similar.
some other metrics for ranking, like the `state` of the project or similar.

47
package.json Normal file
View 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
View 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
View 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
View 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
View 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))

View 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
View 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
View 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
View 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
View 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)
}
})
}

View 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>

View 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 }}

View file

@ -0,0 +1,7 @@
{{ define "main" }}
<main class="mv4 mh2">
TODO
</main>
{{ end }}

7
src/layouts/index.html Normal file
View file

@ -0,0 +1,7 @@
{{ define "main" }}
{{ partial "list" .Pages }}
{{ partial "indexes/index" }}
{{ end }}

View 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" >

View 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

View 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

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
src/static/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
src/static/images/orbit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
src/static/images/orion.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

15
src/static/manifest.json Normal file
View 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
View file

@ -0,0 +1,2 @@
User-agent: *
Disallow: