galaxyproject / galaxy-hub

Galaxy Community Hub
https://galaxyproject.org/
Other
99 stars 275 forks source link

Community Directory #1155

Open NickSto opened 2 years ago

NickSto commented 2 years ago

This is a central issue for all Community Directory ideas.

This was the subject of a GCC 2021 CoFest project. Here are some meeting notes, and here are some mock-ups people made.

This issue is a WIP. For now, here are my notes from the GCC 2021 CoFest discussion:

Person collection

Lets you link to people from other pages (like events)

Can generate dynamic pages that are lists or sublists of Persons

NickSto commented 2 years ago

Metadata keys

Brainstorming the sort of metadata each file will contain (with @assuntad23).

key description
name
subsites How we group them
affiliations A list of dicts with two keys: id (e.g. psu) and name (e.g. "Penn State"). Will probably link to a page about that place.
image profile photo
title .eu has this
email
phone
website Personal site or whatever
github
orcid
gitter
matrix
linkedin
twitter
google-scholar
researchgate
galaxy_help User id on the Discourse site.
galaxyadmin? galaxyproject.eu has this. Do we need it? What does it do?
location Make it structured, like EU's event locations. Would allow us to show a map of where everyone is.
groups Any sort of grouping like working groups, iuc, iwc, steering committee (e.g. iuc, wg-goats)
NickSto commented 2 years ago

Person identifier

One of the purposes of the directory is to be able to link people across the Hub. E.g. the "contacts" on a post can be a list of identifiers linked to Persons. So how do we manage these identifiers?

Option 1: An id key in the metadata

The naive solution would probably be to just add a metadata field named id to each Person, and make up any string there. One issue with that is it could actually be tricky to use it to link to peoples' pages.

Option 2: Take it from the url path

A simpler solution might be to just use the path the page lives at. E.g. if the page is at /people/dannon/, then Dannon's id is just dannon. It makes deciding on a url and identifier the same problem instead of two problems, and it makes it super simple to link to a person.

NickSto commented 2 years ago

Groups pages

Each person is able to list groups they're a part of, which will become a list of links to the pages to those groups. The flip side of that is that we can then automatically list the members of each group on the group's page. But currently the pages for these groups are scattered or nonexistent.

If we touch the groups pages we'll have to decide whether to standardize their locations or try to conform to their existing locations.

For example, some current groups and where they live: Group Path Notes
IUC /iuc/
Steering Committee /community/steering/
GOATS /community/wg/goats/ Doesn't exist yet, but /community/wg/ does, so this would make sense.

Should we add some mapping to config.json to maintain these, or just standardize it to /groups/{group_id}/?

NickSto commented 2 years ago

All Contributors bot

@tnabtaf pointed out this project which made a bot to automatically compile a list of contributors to a repo. By default it adds an HTML table to the repo's README.md, but it looks like we could get it to write to a yaml file (using the files and contributorTemplate configuration keys). The main catch is probably that there's many Galaxy repos we'd like to count contributions to, and even if we enabled this bot on all of them, I'm not sure you can have it write to a separate repo.

NickSto commented 1 year ago

How to connect identifiers with objects from other Collections?

It's great that this project includes creating actual, structured objects for things like people, groups, and institutes. But a fundamental issue I keep running into is that we want to be able to refer to them by simple identifiers like assuntad23 or psu, then use those to obtain the full metadata about each object. In the case of the Community Directory, that mostly means we'll have those identifiers in the metadata of a page, and then want to show properties of those objects in the page.

But we can only do one GraphQL query per .vue file, so once we obtain the ids, we can't go back and ask for the full objects. GraphQL does provide a join-like functionality, but we don't have the necessary control over the schema to do it.

But Gridsome does provide a way to link objects in gridsome.server.js. Hopefully we'll be able to use that, then add the object's properties to the main GraphQL query for each page.