Groups¶
Introduction¶
The Groups feature (also referred to as Pools in some internal documentation and API calls) allows a user to create a joinable group that other Fulcra users can join. Associated with each group is a specific set of Fulcra Data Types and a time range. When a participant user joins a group, that user shares read-only access to their own data with the group owner for the selected time range. This access lasts until the user leaves the group, which they can do at any time.
Group owners can publish the group's unique URL to invite users to make it easy to join (and onboard Context if necessary).
Aside from access to data sharing, group owners can associate a URL with a backend webapp that will open inside the user's Context app. Using this, group owners can build powerful webapps, remixing Fulcra data to create participant-specific experiences, contests, dashboards, and more.
Privacy by Default¶
Group owners can use the Fulcra API to retrieve data from participants' Datastore. However, no other information about participants is shared with the group owner. This includes the participants' real Fulcra UserIDs -- instead of those UserIDs, each participant has a unique ParticipantID that is only meaningful to that group's owner.
No User Surprises¶
Before a user joins a group, they're shown a uniform permissions request. If they agree to join and share their data, it's important for them to know that the parameters of the group won't change. As a result, these parameters are immutable. Group owners can't pull a bait-and-switch.
Request Authentication¶
User-defined group webapps don't run on Fulcra's platform. To build webapps that deliver content specific to a given participant, such as allowing a user to pick a nickname for a leaderboard, Context authenticates requests using a JWT that can be validated against Fulcra's group public keys stored as JWKS.
Group Owner State¶
Group webapps are free to have their own state for storing data, but Fulcra provides a mutable participant-specific metadata array to group owners. Unlike the group parameters, this data is mutable, but is visible only to the group owner.
Group Annotations¶
When creating a group, a group owner can optionally define a template for custom annotation data types. If any of these are defined, a participant that joins the pool will have these types created for them and shared with the group owner as part of the join process. The IDs of the created annotations are added to the participant-specific metadata for that user.