Giter VIP home page Giter VIP logo

ipfs-gui's Introduction

IPFS GUIs

Made by icon. Project icon. #ipfs

The IPFS project has an ongoing, long-running ambition to create visual and interaction standards and patterns for working with IPFS that are ...

  • Simple: Present the big ideas of IPFS clearly, without unnecessary complexity
  • Accessible: Enable everyone to take advantage of what IPFS offers
  • Reusable: Offer compelling standards and atomic patterns to the community of IPFS builders
  • Beautiful: By their nature, things that are simple, accessible and reusable are also beautiful

IPFS GUI projects

Primary projects

At present, primary focus is on the three "helper" apps that provide a GUI for IPFS as a whole, in order to make them useful for seasoned IPFS developers while also offering a welcoming introduction to IPFS for those less experienced.

IPFS Companion IPFS Web UI IPFS Desktop
Browser extension for opening ipfs:// URLs, saving/sharing files, and more IPFS file manager and network explorer in your browser Launch and manage IPFS from a friendly, intuitive desktop app

For a more comprehensive overview of the resources that come together to build, support, and provide education around Web UI, Desktop, and Companion, please see the IPFS GUI Family Mental Model and our June 2020 user research report.

Other IPFS GUI & Tools owned projects

Other GUI projects

In addition to the apps & repos above, other relevant GUI related tools/apps that are not owned by the IPFS GUI & Tools team are:

Visual design guidelines

IPFS-Brand-sheet-public

Get involved!

Contribute to an issue

Contributions to IPFS GUIs are more than welcome! Each of the repos listed under "All projects" above makes use of the IPFS Project's global issue labeling scheme. Good labels to look for are ...

  • help wanted
  • good first issue
  • and there are even occasional bounty labels for issues with rewards as part of the IPFS Bounty Board!

If you see an issue that catches your eye, leave a comment so we know you're interested, and we'll go from there!

We're an open project and a friendly group, so please be nice and read the contributing guidelines when you're ready to jump in.

Discuss in GitHub or chat

For the sake of async communication, archiving, and searchability, we strongly encourage discussions to happen in the context of GitHub issue comments whenever practical.

For casual conversation, our official chat rooms in Matrix and Discord are bridged, so you can join whichever you prefer. They can be used to ask questions and discuss with the community — however, while IPFS core developers are usually in these rooms, it can be hard to keep up with the running conversation and questions can be missed or disappear due to a lack of indexing.

Resources

If you're looking for high-level research or visual and brand info:

Also, these historical resources may be helpful:

Maintainers

This ipfs-gui repo is intended primarily as a higher-order planning and discussion space, so isn't actively maintained in and of itself; however, consult the readmes of the repos listed under "All projects" above for more specific maintainer info for individual projects.

Support goals

Platforms

Due to the difficulty involved in debugging and development on platforms and versions not supported by github actions (and our CI/CD tests), we can only provide support for the top 3 (mac, windows, ubuntu) latest platforms supported by github.

If there is a new platform release, we will support bug-fixes and feature enhancements for that new platform, but will prioritize bug-fixes for things we can automate (CI/CD supported bugs/features).

Languages

Due to a large demand and lack of time, as a general rule, we aim to support the latest (or most popular) officially supported versions of languages.

NodeJS

Production applications should only use Active LTS or Maintenance LTS releases.

See https://nodejs.org/en/about/releases/ for the officially supported NodeJS Versions. We aim to support Active LTS or Maintenance LTS versions with a best-effort support for Current versions.

Support priority:

  1. Active LTS
  2. Maintenance LTS

ipfs-gui's People

Contributors

daviddias avatar hacdias avatar hsanjuan avatar ipfs-mgmt-read-write[bot] avatar jessicaschilling avatar lidel avatar machawk1 avatar olizilla avatar rex4539 avatar sgtpooki avatar victorb avatar web-flow avatar whizzzkid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipfs-gui's Issues

Tech choices for WebUI++

We're approaching the point at which we can start building a new WebUI, using the existing WebUI as a working prototype for what we want to build.

I'd like to put forward some suggestions for your approval for how we build the new app in terms of the tech we use and how it's implemented.


Styles

As a team I believe we're already sold on atomic styling as a methodology and have already used Tachyons on public Protocol websites, within Companion and Desktop as well as Tachyons inspired atoms in ipfs-css.

The existing WebUI uses Less CSS, but using Tachyons largely removes the need for it and means we'll not need a build step to transpile it - hooray!

Frontend framework

I think it's a good idea to stick with a framework that's well known and widely used. The WebUI will have a lot of exposure to users through being bundled with go-ipfs (initially at least) as well as being used in Desktop and Companion (in the near future) so keeping the barrier super low by sticking to familiar concepts and ideas will encourage the community to invest and contribute more readily.

The existing WebUI is built with React, but I'd like to suggest using Preact, which is an alternative and largely compatible with React and has a much smaller file size.

I think the drastically smaller file size is more than enough reason to at least try Preact, and if we encounter significant issues then we should be able to easily switch back to React.

State management

Currently the WebUI is using Redux to manage global state and Redux Saga to create and execute asynchronous actions. I've used Redux in quite a few other projects. There's a ton of benefits but what I love the most is that it makes your actions and components much easier to isolate and test. I'd like to continue using something like this to manage state.

A common pain point with Redux seems to be the amount of "boilerplate" code that has to be written to reduce state and create actions. I'm mildly in agreement with that sentiment so I'm in favour of trying out something new but similar.

I feel that Redux Saga is difficult to understand initially, and that doesn't further our goal to encourage community or even team contributions. In my opinion, async/await is a easier concept to understand than generators and having seen both these language features come into existence the sense I have got is that async/await is much more popular and accessible within the javascript community.

@olizilla suggested unistore as an alternative to Redux. It's a tiny library (650b) and it allows you to create async actions (using async/await) by default. I'm totally up for giving it a shot.

Routing

TLDR;

I think we can just use react-router or preact-router depending on the frontend framework. Sadly we'll have to use hash based routing for the time being. There's no progressive web app generators or routing libraries I know of that don't have issues with routing relative to a particular directory.

Routing backstory

Initially @olizilla and I were thinking of a hash per section e.g.

https://ipfs.io/ipfs/Qmhash0 # ---> home
https://ipfs.io/ipfs/Qmhash1 # ---> mfs explorer
https://ipfs.io/ipfs/Qmhash2 # ---> ipld explorer
# ...etc.

...because we could upgrade sections independently.

However that makes single page app routing difficult (impossible?). We could link to these pages individually, but it would cause a full page reload...

Instead I'd have liked to do:

https://ipfs.io/ipfs/Qmhash/
https://ipfs.io/ipfs/Qmhash/files
https://ipfs.io/ipfs/Qmhash/ipld
# ...etc.

...but off the shelf routing libraries want to assume you're working from the root of a domain, not a subpath, so it means that things might work here:

https://webui.ipfs.io/
https://webui.ipfs.io/files
https://webui.ipfs.io/ipld
# ...etc.

...but not at the aforementioned hash from a gateway.

I'm interested to hear recommendations for routing libs that might allow for this (maybe we should just roll our own) so in the interests of getting things working I suggest we just use hash based routing for now:

https://ipfs.io/ipfs/Qmhash/
https://ipfs.io/ipfs/Qmhash/#/files
https://ipfs.io/ipfs/Qmhash/#/ipld
# ...etc.

Transpiling

The current WebUI is ES2015+ and I'm happy to stick with that. We have to transpile JSX anyway (assuming that we want to use JSX) and so we might as well take advantage of ES2015+ features :D.

I'd like to ensure we include a class fields transform so that we don't have to do any manual binding of instance methods, so we can easily define static class properties and so we can avoid a bit of boilerplate writing constructors to create default state.

Linting

I'd like to use standardjs for linting as I've found that it has sensible defaults and is good at catching common mistakes before runtime. I have no desire to configure and maintain a custom eslint (or similar) and considering standard is in use by many other JS IPFS projects it makes sense to stick with it.

Bundlers

I find webpack config confusing and I'm much more inclined to just use browserify to bundle up our codes. I was hoping we'd be able to use factor-bundle (as we have done on a bunch of the Protocol websites as well as in Companion) to pull out common dependencies but hash based routing means that we'd just have to load everything anyway since everything is served from the root of the application.

Do people have strong feelings about using webpack or other (rollup‽)?

Testing

I'd like to see good test coverage from day 0. I'm well aware that the vast majority of IPFS projects use mocha but I'd like to throw in my preferences for consideration:

I've always been a fan of tape but nowadays I've been leaning more towards ava since it's like tape, but concurrent tests, promises support and you can write tests in ES2017 out of the box.

For coverage I've switched to nyc, which is basically istanbul but with concurrency support.

I want to have e2e browser tests, but I'm just so disheartened with selenium based browser testing frameworks. Is there something better than nightwatch.js? Is there any selenium alternatives that have some traction and are maintained?

Build tools

AEgir is the obvious choice, but proposals above for bundling and testing are at odds with what AEgir provides. Shall we just use AEgir? I'd prefer to use browserify but it's not the end of the world if we use webpack and likewise for mocha.

Otherwise, I'm an advocate for no build tool and just npm scripts. @olizilla and I have been using npm-run-all quite extensively and with great success but I have been getting frustrated with ordering and dependent tasks. I basically want to be able to define dependencies (other npm scripts) that need to execute before mine does and have the library figure out what the ordering should be. Kinda like async.auto. @olizilla pointed out that I was describing makefiles so I think we should just use make (which we have done already in IPLD website IPFS website and others). That said, make is not platform independent - Windows users might have a bad time.


I'd like to hear your thoughts and if I've missed anything! Lets build glorious future together 🚀

Component library for UI elements and accompanying style guide

April 2020 update

Let's use this issue as a placeholder for future work on component-izing UI elements (including documenting them, style-guide-wise) in a manner that can easily be reused by all our helper apps as well as anyone else who'd like to build on the core IPFS look and feel.

Note: this should probably end up with its living home in the IPFS UI Style Guide. See issue ipfs-inactive/ipfs-ui-style-guide#2 (closed in favor of this meta-issue).

Original issue text follows:

Over the last week, I opened some issues, PRs and a repository. All about the same thing: reusable components. And I'm opening this issue to get a central point to discuss everything about this and define priorities and goals.

So, first of all, the references:

@akrych published the first Web GUI Kit on #7 yesterday and it is amazing and there are some things I want to get clear before moving more than I've moved.

During the last week, I fixed some stuff on Desktop, but it was on the PR related to the components so this won't get merged soon, but I am proposing the following.

About IPFS Desktop

This will be the priority for now. @akrych will start drawing some wireframes for it and we can start implementing the new UI on it right after. I started using the ipfs-react-components library on the PR I created (ipfs/ipfs-desktop#596) but I'm thinking about moving the components to a directory on IPFS-Desktop or use a Git Submodule.

Why? There is an issue with Electron Forge and it is making it very hard to deploy and develop faster since I can't link the module.

Steps I suggest to do:

  1. Move the ipfs-react-components components again to IPFS-Desktop repository.
  2. Fix the issues I've got listed on ipfs/ipfs-desktop#596.
  3. Implement the new UI scheme and during this part of the development, always make the components the more abstract as possible so they can be easily moved to a shared library.
  4. Make this awesome!

About IPFS Companion

Since I'm not really into IPFS Companion, I'd like to ask you what do to next here 😄 /cc @lidel

About IPFS WebUI

After having IPFS Desktop with a nice UI and UX everyone agrees with (as you said @olizilla), we can move to IPFS WebUI. I was taking a look at the OKRs we've got defined for this quarter and saw this:

ipfs-dashboard is built as a reusable replacement for ipfs-web-ui

It was classified with priority 4. My suggestion is to forget the PR I started (ipfs/ipfs-webui#618) and start working on ipfs-dashboard using the new elements and the new UI. And, when it gets finished, we can replace IPFS WebUI by IPFS Dashboard.

About the Reusable Components

So, as you all probably know, I created a repository called ipfs-react-components and I was very happy because it was all working. But now it seems it was slowing me down a bit. My suggestions here are to:

  1. Wait until we have the new GUI Kit implemented on ipfs-desktop.
  2. Then implement this elements and move some of the other reusable elements created on ipfs-desktop to that repo.
  3. Then, use it during the development of IPFS Dashboard.

In the meanwhile, all the components we make should be "stupid" components, I mean, they don't need Electron's or the browser APIs to work. They receive information and they just work.


What do you all think? Let's make this clear and move forward fast. 😄 Sorry for not having this clear yet.

Settings page: add UI controls for common settings from config file

I had an opportunity to talk with enthusiastic non-technical person and she asked interesting question: "sounds cool, but after I install it, how can I control how much disk space IPFS can use?".

AFAIK right now one can set StorageMax via commandline or by editing JSON at http://127.0.0.1:5001/webui/#/config:

screen shot 2017-12-18 at 23 16 16

I think we can agree that editing JSON by hand is.. not the best UX :) There is a real need for simplified and intuitive UI for setting selected configuration keys, StorageMax being the most obvious one, Gateway port being another one. Less is more. It is ok to have UI only with a few settings, leaving the rest to commandline or "Advanced Mode".

Open Questions

  • Which configuration keys should have UI for setting them?
    What is most likely changed after installation?

  • Should we leave option to edit full config in JSON format?
    Perhaps it could be initially hidden under a button saying "Advanced Mode" or something like that.

UI for sharing mutable (IPNS) public folders

Idea extracted from: #34 (comment)

  • we have ability to expose a mutable folder under permalink /ipns/<KeyID>
    • there is an option to create as many keys as you want, so we can have multiple mutable folders
    • this could be complimentary way of sharing things that require more dynamic approach than "sharing static snapshot"
  • it could be integrated within File Browser as a "special folder" (or as a badge on any folder)
    • context-click on folder, select "Publish as a live folder on IPNS"
    • is is extremely important to get UI right, and make it super obvious that the folder shared this way is mutable

Open Questions

  • how to name/present this feature to differentiate it from static sharing of immutable /ipfs/?
  • what happens with a key when "shared live directory" is removed from MFS?
  • are we able to watch MFS directory for changes in an efficient way?
  • how long IPNS address will be valid without reproviding? Should we communicate it to the user?
    • eg. I share from my laptop, then close it and go for 3 day vacation.

The toolkit - Let's make sure to pick the tools we like to work with and that can help us achieve great things!

One of the points brought up during the kick off call is what tools and services to use to collaborate in this project.

Historically, we have used at Protocol Labs a waterfall style where:

  • One of us brain dumps the idea for the design (in a very comprehensive way) - Github issue
  • Wireframe gets created and iterations start to happen - Invision or Zeplin
  • Design and Content gets created - Invision or Zeplin
  • Code gets written

This process is not set in stone and I would love to have something that after the first launch, we can open to the community and make it easier for everyone to contribute with changes (git/github style).

What is everyone's experience? What worked really well in the past and what didn't?

Define the focus and scope of each app

What is the main purpose of WebUI, or whatever it will become? WebUI has a lot of good ideas in it, but it's due to some UX & perf issues and some missing features, I don't think it is able to do a great job yet.

Companion's purpose is clear as it is greatly limited in what it can do by being confined to the WebExtension apis. It is to integrate IPFS functionality into the browser. It can offer IPFS info to the user about content that is in the current tab, and it can provide a drop-down menu of options. Significant features (add / share file, browse files) have to be offloaded to a web ui, either custom to Companion and bundled with it (as per the current impl of file upload) or it can directly hand off to a separate app (WebUI... or possibly Desktop via protocol handlers? @lidel @hacdias is that possible?)

Desktop as a standalone app, has the most freedom in how we build it, what it does, and how it looks. We could rethink it as a minimal menubar application, with it's main purpose to keep an ipfs daemon running and indicate to the user at the OS level that IPFS is available, along with OS integration so it shows up in the native file browsers. This is how Dropbox works right now

screenshot 2018-03-07 10 46 52

Alternatively, we could make it a full screen, desktop app, and have it do everything (file-browser, dag explorer, ipfs node manager, PIN a dataset). This'd be more like an IPFS Workbench app (think db explorer).

There is a desire to decouple to WebUI from go-ipfs deployment, to allow us to iterate on it separately, and to avoid sending the message that people should open api ports on their own ipfs gateways! There is clearly a desire for an IPFS node management app, that let's a gateway admin see what's going on with a given IPFS node. But we could rethink that as a single app that could be pointed at any IPFS node (there is a missing authentication story here, but we should come up with with the best apps we can think of and then describe what's needed to get there, and bump the priority on issues we need to fix to make it happen)

File Browser: Native OS Integration

Background

Feature request spawned from discussion in #9:

Should we implement an OS integration, so you see IPFS files in your preferred file browser?
@diasdavid, #9 (comment)

It's worth pointing out at this juncture that Dropbox has a web based file explorer as well as a native integration.
[..]
it makes sense to have a native integration to avoid alienating those users who don't understand "where the files are going", [..] familiarity is the really big one - Using something you already have (the native OS file explorer) but with extra bells and whistles is probably way easier than learning a completely new app. I'm speculating that most people nowadays are comfortable using their native OS file explorer and I reckon that's probably what Dropbox also gambled on (ahem, researched well ;)). Dropbox is pretty popular and in my experience seems to be understood well by most people technical or not.
[..]
There's also the reason that IPFS has already done a lot of low level work to expose itself as a regular Unix filesystem. It seems rude to not take advantage of that when it's so easy to do so.
@alanshaw, #9 (comment)

Work towards native OS integration

Open Problems

  • research if FUSE is a silver bullet for targeted platforms
  • research how to add context actions to native file managers
  • address key pain point: many FUSE libraries don’t support file locking, which many native apps rely on

Rules of Thumb

  • make sure experience is seamless and intuitive on OSX and Windows (the biggest GUI-oriented user base)
  • when in doubt, follow patterns established by things like Dropbox to decrease cognitive load on newcomers
  • things that can't be supported via native integration can be delegated via context menus to web-based counterpart

Prior Work

FUSE on Windows: there's a nice package called Dokany which allows us to use FUSE bindings on Windows.
@hacdias, #9 (comment)

As for native integration, I wrote something a while ago for myself and put it up here
https://ipfs.io/ipfs/zDMZof1m1fX98cTLyC2VLe9iDQQhWgDLu5foshBSsxSWHQNuiyYV
It's a glorified wrapper for ipfs.exe and a bridge between the Windows shell.
@djdv, #9 (comment)

Design: WebUI

As per our roadmap (#47), the next step to take is to create the wireframes for WebUI and then build it and make it awesome. So, I decided to open this issue to list the current features of WebUI, some suggestions and inspirational dashboards.

Current Features

  • Node informations such as:
    • ID
    • Public Key
    • Addresses
    • Location
  • Peers:
    • Number os peers
    • Information about peers
    • A globe showing their location (this globe consumes a lot of GPU and makes the page very slow on not so fast machines).
  • A file browser to add, remove, rename and manage MFS files.
  • Preview files (music, video, images and PDFs).
  • Page to edit the node settings.
  • Object explorer (see #11).

There is also a logs page, which is not directly accessible through the sidebar, but you can to its URL (/logs). It's a bit buggy and can even block the page due to the huge amount of requests it makes.

Suggested features

It's true that WebUI has some interesting features, but it could be a lot better. Let's see some things I'd like to see in WebUI:

  • A new name. I know this is not a feature, but WebUI is a weird name to call to a Dashboard like this. Please see ipfs/ipfs-webui#612.
  • A page to see statistics and beautiful graphs showing the change on Upload and Download speeds and the storage and some stuff like that.
    • We could store this data on localStorage so every time the user loaded the page, we would have something to start the graphics with.
  • A way better file manager where we can move, download and copy files with better previews.
  • The brand new IPLD Explorer.

Design: IPFS Protocol Indicator Icon

ipfs/ipfs-companion#418 adds Protocol Indicator to Location Bar in Firefox.

Initial implementation looks like this:

  • no icon – regular non-IPFS resource
  • grey icon – valid IPFS resource, but loaded from a public gateway (via HTTP)
  • aqua icon – IPFS resource loaded via user's custom gateway (aka "actual IPFS was used")

Is this clear enough, or should we create custom icon for public HTTP gateway (half-aqua or something)?

If we create something custom for transport indicator, icons should feel native, blend-in and support for dark/light themes in Firefox.

Use Case: Pinning Buddy System

Together with @olizilla we've identified some UX challenges related to sharing files via IPFS (#34), and one of ideas was to provide an opt-in trust-based way for a group of friends to participate in a "pinning buddy system".

Disclaimer:

This may exist in some shape and form already (see Prior Art below), this issue is just a placeholder to investigate UX around making it work for casual users with minimal friction possible.

Use Case

"How to keep shared content around when you shut down your laptop?"

Things like Filecoin or commercial pinning services are one way to solve pinning, but hobbyist users and developers may not want to go that route.

UX of Pinning Buddy System

Rough idea is to provide a super easy way for group of people to opt-in to a scheme where they pin each others pins without any money/goods being exchanged in the process. Think "group of friends", "small software house" or "members of local hackerspace".

How we can make the processs as simple as possible?
Ideally, it would be one-time opt-in that looks roughly like this:

  • generate unique secret/key (pubsub room id?) for the group
  • share it between your friends (IM, email)
  • everyone adds it to the config of own IPFS node
  • from now every pin made by a member of the group will be automatically advertised (eg via pubsub) and all group members will preload/pin it in best-effort

Security Considerations

  • It should be explicitly documented as trust-based alternative to things like commercial pinning services. It means, you trust every group member with the knowledge what are your pins.
  • Should opt-in have an open or closed characteristic?
    • open: new members just add the same key (probably better UX)
    • closed: adding new member requires everyone to switch to a new key (better security, as it would enable things like key being a product of PeerIDs of all "whitelisted" members)

Prior art

What is the ipfs font?

it would be good to have a font that can be used for fancy headers across ipfs-companion, ipfs-desktop and ipfs-dashboard, and any other ipfs apps.

https://ipfs.io currently uses Brandon Text - https://www.myfonts.com/fonts/hvdfonts/brandon-text/

screenshot 2018-01-09 10 36 16

Who is the license holder for the copy that is currently used on ipfs.io?

The license is here: http://www.myfonts.com/viewlicense?type=web&buildid=3229221

The license seems pretty standard, but somewhat restrictive:

Use of the Licensed Web Fonts with technologies other than @font-face, such as sIFR, Cufón or Typeface.js, is not allowed.

You must retain the page view tracking code, as supplied in the Web Font Kit, on all Websites that Use the Licensed Web Fonts.

The Licensed Web Fonts may be used on any Website owned or controlled by you (subject to the next bullet point). The total traffic, measured in page views, of all Websites Using a Licensed Web Font must be no greater than the number of page views specified in your account at located at www.myfonts.com

At time of purchase, it seems that number of page views specified in your account was set 10,000 / per month

Settling on a more permissively licensed font would be great.

Get Agatha familiar with WebUI, Station and IPFS Companion

Let's get Agatha using all of the tech we create :)

Let's also use this as an experiment to get feedback from a user trying them for the first time. For this I ask:

  • @lidel can you guide Agatha on installing ipfs-companion. Perhaps share links first and then if there are questions, set a quick call to answer them?
  • @hacdias can you do the same for webui and station?
  • @akrych can you write notes from your experience as a user? A UX review in depth.

Consider abandoning Web UI?

We could instead ship ipfs-companion with go-ipfs and js-ipfs. There's a ton of overlap and we could avoid some of that, as well as the burden of maintenance and harmonization.

[META] Solidify mental model/language for MFS add vs IPFS pin

Note: This issue is part of a larger pinning service integration epic undertaken spring/summer 2020.

Pinning content is a new idea to most users, so we need to invest some energy in coming up with a good way of explaining it and helping the user build a useful mental model of how it works and why it's interesting.

A use-case for this is the data-together idea of sharing the hosting of content you feel is important. You can go to https://archives.ipfs.io/ and grab a hash for a dataset and replicate it all to your repo, to add more copies of it to the network and increase it's availability.

More simply you can use it to mark content that you think is important and you want to preserve.

On the flip side, a user should never have to think about pinning their own content. When I add a file to an app, I expect it to stay their until I choose to remove it. We need a clear mechanism to deal with managing repo-size and purging old content.

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#pinning

Meta: Translation Project for IPFS GUIs

Current State

It's alive! https://github.com/ipfs/i18n

  • Thank you all for help and smoke-testing the setup! ❤️
  • Crowdsourcing translations from IPFS Community
  • Everyone can join using github account!
  • Missing language? Join and request it via Transifex
  • I moved docs and reading material to a dedicated project at https://github.com/ipfs/i18n
    • Feel free to improve it with best practices and resources useful for others

Dear future reader:

If you have trouble with i18n framework, translation site, locale format or want to add project to Transifex please fill an issue here.


(Original issue below)

Background

Click to expand

In the past it was a mixed bag: different services, missing locales, no common corpus/dictionary to support crowdsourcing efforts.

Milestones

Manual

  • all GUI apps support translation and ship with English as plain text locale files
    this is very important:
    • establishes convention and people can PR with new locales via github
    • enables us to experiment with different crowdsourcing websites in async mode

Semi-Automated

  • translations can be provided via a crowdsourcing website: https://www.transifex.com/ipfs/public/
  • there is a single crowdsourcing website that user can join to start translating
  • maintainer is responsible for synchronizing between github and crowdsource website
    • push source locale (Engligh) a week before release and/or on big changes
    • fetch translations on release day
    • (this does not scale well if we have multiple projects)
  • licensing is solved (ipfs/community#331 (comment))

Full Automation

  • there is some kind of automation that removes friction
    • synchronizes new source strings from github (master) to crowdsourcing site
    • synchronizes new translations from crowdsourcing site to github
      • eg. making a PR once a day or by commiting to locales branch on daily basis to make sync as easy as merge to master

References

Transifex


Click to expand notes for CrowdIn (alternative to Transifex)

CrowdIn

  • Manual sync via CLI Tool
  • Bonus perk: Localization That Does Not Delay the Releases
  • Configuration File: crowdin.yaml
  • Sync automation
    • Option A: Set up Jenkins with the CLI Client
    • Option B: Native GitHub Integration:

      Crowdin’s integration with GitHub makes source and translation files synchronized with GitHub repository and Crowdin translation project. All translated and approved files will be automatically pushed as a pull request to the l10n branch in GitHub repository.

      We do not commit directly to master, so that you have a chance to verify translations and keep your app safe and sound. By default, l10n_ is added to the created service branch name. In case of necessity it can be easily changed.

      • Good: looks easier to set up than Transifex
      • Bad: requires granting write access to repositories (we already use things like Waffle, but still...)

Design: IPLD Explorer

An IPLD explorer could be hugely useful for letting people play with IPLD and IPFS to build an intuition of how it fits together.

WebUI has a DAG (IPLD) explorer. It takes an IPFS hash (also due a rename to CID) and lists out all the links or data that in the object the CID points to. In the case of a directory, you can see a list of the files it contains, and each filename is a link to it's IPLD object, allowing you drill down, navigating through the links. Where a hash points to data, the raw data is rendered in plain text.

The UI/UX should be improved but the idea is interesting, and could become a vital tool for helping people to understand IPFS and IPLD.

Project description: https://github.com/protocol/pm-ipfs-gui/blob/master/proj-descriptions/IPLD_EXPLORER.md

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#dag--ipld-explorer

Available to help out.

Hey guys! I'm me, and I would like to help out with whatever needs an extra pari of designer eyes.

My background is more or less 10 years of UI/UX working on everything from marketing websites to bigger products. My last job was at https://typeform.com and now I'm working with a little bit of everything. I was involved a bit with Filecoin and Coinlist some months back too.

The past year I've been focused more on building design systems, and figuring out good ways for that to work at scale. But also working with more gritty product design work as well as marketing sites.

You can see some of my projects here: http://linusekenstam.com - Or just ask some questions and I'd be happy to try to answer them and give more info.

/ L

Jan 04 - Weekly Sync Up

Hi all! New sync up today, the first of 2018!

Here are all the links. Please add items to the agenda as you see fit.

Expected list of attendees:
image

(really need to automate the generation of this issues.. maybe Bjelkholm god hears my prayers 🙏🏽)

Design: IPFS Desktop

As we agreed earlier we need some design inspirations examples for desktop :) We have some - but I would like to invite you to search some more desktop/file applications that you like.

It will also extremely useful for me if you point shortly "what do you like" and "what do you don't like" in specific app/design. The negative examples can be even more useful for design than positive ones :) 👍

Some examples that we already mention in others issues:

Dropbox

screenshot 2018-03-07 10 46 52

Keybase

screenshot 2018-03-07 10 46 37

Webtorrent

screenshot 2018-03-07 10 52 15

screenshot 2018-03-07 10 52 20

Dat desktop

screenshot 2018-03-07 10 32 21

https://github.com/dat-land/dat-desktop#dat-desktop

Tranmission

screenshot 2018-03-07 10 46 52

Forever

screenshot at mar 21 13-48-12

ipfs/awesome-ipfs#128

File Browser by hacdias

file

https://filebrowser.github.io/

Represent IPFS Cluster in WebUI/Desktop

ETA April 2020: Let's also consider the "pinning buddy system" thoughts originally in #36 as one way to introduce Cluster concepts.

@hsanjuan made the good point that the IPFS Web UI could usefully show info about IPFS Cluster nodes if the api is available.

As we discussed about having a Cluster tab in the IPFS web UI, here are some pointers and thoughts.

Things we need

  • Support CORS Headers in Cluster for browsers to be happy showing stuff from here.
  • See my list of peers with their names and IDs (or a fancy diagram).
  • Display the pin statuses (/pins), filter, sort them etc. CIDs would have links to the IPLD explorer.

...and more input!

  • What extra info does cluster expose that we'd benefit from visualising?
  • What blockers are there to re-using the new Web UI with cluster today?

Accessibility review/edits for Desktop, Companion, WebUI

Edit: April 2020

Placeholder issue for reviewing and acting on accessibility overall for Desktop, Companion, and WebUI. Suggest that we dig into this mid-2020 once we've got an additional round of issues for the apps overall knocked out. Please see specific issues that have been closed in favor of this meta-issue:

Original issue specs

This is a placeholder issue for coming up with a strategy to tackle accessibility in our apps and documentation

The Web is fundamentally designed to work for all people, whatever their hardware, software, language, location, or ability. When the Web meets this goal, it is accessible to people with a diverse range of hearing, movement, sight, and cognitive ability.

Accessibility is essential for developers and organizations that want to create high quality websites and web tools, and not exclude people from using their products and services. #

Tasks

  • identify potential accessibility problems in User Journey (#6)
    • create/track accessibility issues in responsible repos
      (eg. website, desktop, Companion, Dashboard)
  • include accessibility tips and guidelines in our Style Guide (#7) and other materials, make sure materials themselves follow good practices

References / Reading Material

Design: Share files via IPFS

How do we make sharing files via IPFS feel great? It's the first thing I tried to do with IPFS, and I think it's something we should invest some time into making really good.

This is closely related to "Add files" #35 and "File Browsing" #9, as you might want to add and share a new file, or browse for a file you added to IPFS previously and (re)share that.

Related issue on companion: ipfs/ipfs-companion#342

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#sharing-files

Design: Connections / Peers List

How should we indicate to the user that they have peers. That they are participating in the distributed web with many other people.

How much info should we show about who and where you are connecting to? What can I do with it?
What functionality could we add to turn this into a great feature, or is it purely informative? Can I block or mark peers as friends (see: #36) for example? Chat? Browser files other peers?

What shouldn't we show? Is it creepy to show peoples geocoded locations from their public ip? This is related to the more general question of what ipfs node stats we should show and how #33

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#connections--peers

UI for encryption before upload

Part of UX improvements for sharing local files (#342)

Idea extract from #34 (comment) and ipfs/ipfs-companion#342

Provide easy way to share secrets

  • encryption and decryption happen client-side (JS)
    • use well known, audited library
  • an option to encrypt content before upload via AES
    • uploader can choose enter a secret (password) for encryption or it will be generated automatically
      • ideas: it can be a "password" in proquint form, or a "key" in hash part of the URL
    • produce additional static landing page that instead of details about uploaded data prompts receipent for secret required for decryption
    • after decryption, show regular landing page (#34 (comment))

Write Permissions

@olizilla since this was moved from shipyard I no longer have write permissions to this repository. Could you add me, please? Every time I try to do something on Waffle board, it just shows me a message saying 'Only collaborators can update cards.'.

Design: Logos / Icons

@olizilla asked a very good question during OKR discussion:

A logo for DashboardWebUI, Desktop and Companion to give each an identity that shows they separate parts that work together?

Renaming WebUI and Station

In the last call -- https://github.com/protocol/pm-ipfs-gui/blob/master/meeting-notes/2017-12-14--ipfs-gui-kickoff.md -- we reached a consensus that WebUI needs a new name as it currently is a very misleading name or just not informative at all.

My first proposal is ipfs-control-room so that we have a:

  • ipfs-station - Docking station on a user machine
  • ipfs-control-room - Dashboard for the user to control its station and/or ship
  • ipfs-companion (or ipfs-ship !!) - The vessel that takes you through the DWeb

In my head, it makes it a sweet evolution from the era where people Surfed the Web to the era where people Spacetravel the DWeb!

Other ideas?

Re-think WebUI as 'explorer' app that can connect to any IPFS node

There should be no friction for an app to connect to a locally running IPFS node. It's useful to be able to connect to an IPFS node running on another machine. Companion supports this now, as it used to require an external IPFS node to run, but cannot install one as it is packaged and distributed as a WebExtension.

We should consider not bundling WebUI with go-ipfs (See: #4) as it causes people to open up their api port to the public internet, which is a significant security issue. Rethinking WebUI as an IPFS dashboard / explorer / workbench app (like say a database explorer app) that can configured to connect to any IPFS node, local or remote, and have it display stats and a file browser #9 and IPLD explorer #11 would be really interesting.

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#control-which-ipfs-node-you-connect-to

IPFS blog GUI?

It's time to make a venue for posting content generated by researchers at PL.

I don't think we need a new domain - the most logical place to put this would be https://protocol.ai/research
I don't think we need much design - I want it to be pretty brutalist

I think it should be on IPFS
I think it should be user friendly - ideally researchers could preview and post markdown with images without needing to ask for help
I think it should also be useable on the filecoin blog, main PL blog, and perhaps even the IPFS "starlog" blog

Perhaps most importantly, this effort ideally should not cause a noticeable slow down other IPFS projects - this likely means bringing in an external individual or team.

@olizilla, any recommendations?

Ensure Multiformats Are Used Where Possible

Background

I see an opportunity to make people familiar with https://multiformats.io

Things like CID/multihash are already present in our UIs, but we still use URL for things like IPFS API or HTTP Gateway in GUI of ipfs-companion.

At the same time, go-ipfs (commandline daemon) is already printing these addresses as multiaddr:

API server listening on /ip4/0.0.0.0/tcp/5001
Gateway (readonly) server listening on /ip4/0.0.0.0/tcp/8080

Tasks

See if below things exist and create if they do not:

  • reusable converter between URL and multiaddr ?
  • HTML5 comes with built-in validation for URL in input, we should create a polyfill that does the same for CID and multiformats (at least multihash and multiaddr) and can be used across all GUIs.

Go over our GUI apps and create issues in dedicated repository if there are places where we could use Multiformat but don't yet:

Design: Generic Landing Page

@akrych noted that we have various issues related to this, but no "meta-issue" to track progress across all repos, so here it is :)

There is ongoing work that could (potentially) benefit from a common "template":

So far we:

  • started with initial mockups for a Landing Page at WIP PR ipfs/ipfs-companion#326
  • work-in-progress: ipfs-ui-style-guide – a shared style guide for UI design in the IPFS universe that extracts common visual features from prior art, builds on top of it and documents everything in reusable form

Let's keep this ticket open to improve discoverability of related efforts until we have a single template page that follows style guide and can be quickly dropped into projects (eg. static-page-demo.html in ipfs-ui-style-guide repo?).

Controls for node start/stop, bandwidth/size management

What controls should an app provide for managing an IPFS node? Desktop let's you Start/stop the daemon, but WebUI and Companion don't.

Beyond that, bandwidth throttling, Repo size management would be super helpful. Why would a user want to stop their daemon process? Perhaps start/stop is less useful than actually being able to reduce and manage the amount of system resources it consumes.

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#start--stop-ipfs-node

Research: The IPFS User Interface Project

Just came across the research-project within this repository and came across the following in the first line:

want to make IPFS GUIs beautiful, reusable, and unified

Is this not missing the single most important part, functional / easy to use? It's great that we want to it to be beautiful, but it should be functional and easy for the user foremost.

Summary-style status screen (1/2)

ETA (April 2020):

This may be superseded by ipfs/ipfs-webui#1003 (dashboard-style revision of entire UI).

Original issue:

All three apps show IPFS node stats as part of the initial UI that is show the user first, at startup.

Let's identity which bits of information a useful to which users and under what circumstances. What background knowledge is needed to interpret the data. What unit should it be presented in? How frequently does the info change? Is it most useful as a current value, or is it best presented as the change over time of the value?

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#ipfs-node-info

[Discussion archive] File Browser

A pleasing file browsing is essential. People have strong opinions about how they should work and a lot of experience using native desktop file browsers on their OS of choice.

With MFS, IPFS has a filesystem api that we can map to a traditional posix / unix like filesystem. But IPFS also has additional concepts like the CID, immutability, and file sharing, content pinning that we need to find a good way to articulate to the user.

Should all IPFS apps share a common file browser implementation or should they redirect the user to an improved WebUI, so the reuse is at the application level? Should we implement an OS integration, so you see IPFS files in your preferred file browser? What does a great file browsing experience with IPFS super powers looks like?

Project description: https://github.com/protocol/pm-ipfs-gui/blob/master/proj-descriptions/FILE_BROWSER.md

The current state of things is described here: https://github.com/ipfs-shipyard/pm-ipfs-gui/blob/master/research/README.md#browsing-files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.