Summary
Apps in FreedomBox are all in one uncategorized list. This makes it hard for users to find similar apps, alternatives and what all purposes an app can be used for.
People have been asking for app categories to serve this purpose. This proposal suggests using tags instead.
Assumptions
Only tags for Apps page is discussed. It is assumed that the System page will never grow big enough to need tags.
Problem
Apps in FreedomBox are all in one uncategorized list. This makes it hard for users to find similar apps, alternatives and what all purposes an app can be used for. Unfortunately, apps have multiple purposes and do not neatly fit into categories e.g. Ikiwiki can be put under any of three categories - wiki, blogging, forums.
Solution
Flat is better than nested.
– The Zen of Python
Each app can have a set of descriptive tags.
Multiple apps with the same tag implicitly fall under the same category.
bit-torrent
- Deluge, Transmission
file-sharing
- Sharing, Syncthing, Samba, Bepasty, Deluge, Transmission …
Clicking on a tag reveals all the apps in its category.
e.g. Clicking on bit-torrent takes the user to /plinth/apps/tagged/bit-torrent which filters the apps in the apps page to reveal only Deluge and Transmission.
If we have a search feature, tags can be shown as suggestions in a drop-down while searching.
Screenshots/Layouts
URL: https://demo.freedombox.org/plinth/apps/tagged/file-sharing
Alternatives
Apps can be classified into categories instead of using tags. This can be implemented in two ways:
- Each app belongs to one category only
- An app can be placed into multiple categories
The first option puts an app in one category only. Users will not discover the other uses for the app easily. It is also hard to put some multi-purpose apps under a single category.
The second option seems better, but it overpopulates the apps page with duplicate apps in multiple categories. This also confuses users when trying to decide which app to install in a category.
Tasks
- Manifests of apps have an optional list of tags which are displayed in app pages
- Clicking on a tag shows a page with all apps under the category
Implementation
Since the number of apps is small, a first implementation can maintain an in-memory map of tag => list of apps. A KV store might be required when we reach thousands of apps.
Extension
Since each tag is a set of apps, one might think of implementing union, intersection and subtraction of sets. We can think of implementing these advanced features if there is need.
Caveats
Reuse of tags should be encouraged. Using overly specific tag names (e.g. binary-pastebin) will lead to a proliferation of tags. One tag corresponding to one app only will defeat the purpose.