It’s now 10 days until we head of to Tunisia to work on Realities! We will be six developers (@hugi, @gustavlrsn, @liam, @questioneer, @owen and @Lazzlo), one facilitator visionary (@brooks) , one artist/designer trickster (@jakobskote) and one PhD in network science and Edgeryder extraordinaire (@alberto). We will be hosted by @Yosser and for the first two days we will be joined by up to seven additional bright and eager local web developers. Furthermore, the great @erikfrisk might be popping in remotely from time to time and we might also get to work with the spectacular @lowlandjuju and @hspeijer.
To harness this power, we need direction. That’s my job, with your help and support, and @brooks above all is helping me keep that direction. As those of you who were around for the first Realities hackathon know, my particular style of setting direction often start with detailed outlines. You also know that these outlines can and should be questioned. Please do so.
Based on feedback, testing and some thinking over the last few months, I’ve come up with a list of improvements that I think we should focus on for our next release. In the spirit of popular open source projects, each release has a code name on a theme, and what is a better theme than Borderland camps? Our first release will be called [re]connect, named after a camp at the Borderland with a particularly good vibe to it. And this project is all about connecting the dots, after all.
So here it is, the direction. Please point out any errors of judgement now. In the coming days I will try to form teams around a bundle of tasks in a way that makes sense.
We won’t necessarily get all this done in Tunisia. Things that still need to be finished can be worked on in December by those who started the work. We have a bit of budget allocated for freelance hours for those who have done significant work already and know the codebase well.
Realities 0.1 – [re]connect
Target release date January 2019
Task summary
Technical core improvements
- [ ] Realtime data update client side
Authorization
-
[ ] Only allow deletion of Need without Responsibilities
-
[ ] Authorize actions
New features
-
[ ] Multiple deliberation threads
-
[ ] Send email notifications
-
[ ] Reassign Responsibility to other Need
-
[ ] Show user subgraph in profile
-
[ ] Search for people, go to their profile
UX/UI improvements
-
[ ] Guided formatting of Need and Responsibility descriptions
-
[ ] Icons on cards and titles to indicate if realizer vacancy
-
[ ] New entry auto focus on text area
Integrations
-
[ ] Implement Ruby on Rails GraphQL API endpoint in Dreams
-
[ ] Realities connection to Dreams GraphQL API
-
[ ] Realities connection to Loomio (Talk) API
Implementation details
Technical core improvements
Realtime data update client side
When changes are made or Nodes or Responsibilities are added remotely, this must trigger a real time update in the client.
Authorization
Only allow deletion of Need without Responsibilities
Only Needs without linked responsibilities should be deletable. A friendly message explaining this would be nice to have too.
Authorize user actions
-
Authorize: Invite user to take over as Guide
- Authorized for action:
- Reality guide for Need or Responsibility
- Authorized for action:
-
Authorize: Invite user to become Realizer
- Authorized for action:
- Reality guide for Need or Responsibility
- Realizer for Need or Responsibility
- Authorized for action:
-
Authorize: Delete node authorization
- Authorized for action:
- Reality guide for Need or Responsibility
- Realizer for Need or Responsibility
- Only Need without connected Responsibilities can be deleted
- Authorized for action:
-
Authorize: Add and remove dependency authorization
- Authorized for action:
- Reality guide for outgoing Need or Responsibility
- Realizer for outgoing Need or Responsibility
- Authorized for action:
-
Authorize: Reassign Responsibility to other Need
- Authorized for action:
- Reality guide for Responsibility
- Realizer for Responsibility
- Authorized for action:
New features
Multiple deliberation threads
Currently, only a single link to a deliberation thread is allowed per Need or Reality. This is not very useful, since most Needs and Realities will be complicated enough that multiple threads are needed. Instead, we want to be able to define:
- A group on Loomio/Talk where deliberation usually happens for this thing.
- Any number of threads on Loomio/Talk where discussion on this thing is happening.
Instead of the deliberation link being a property on the Need or Responsibility Node, it will now become its own (Info) node with a HAS_DELIBERATION relationship to any number of Needs or Responsibilities. Essentially, the thread is information, and the deliberation is defined by the relationship to the node.
To make it clear if there are active discussions ongoing, it should be possible to set the status of a deliberation. To begin with we will have four statuses – Active, Closed, Inactive and Active Conflict. These are set manually. This status is held as a property by the HAS_DELIBERATION relationship.
If a Loomio/Talk group is added, this is automatically sensed and instead of a HAS_DELIBERATION relation, a HAS_DELIBERATION_GROUP relation is created. Groups and threads are distinguished by colour and styling in the UI.
If a Need has a deliberation group, any Responsibility fulfilling that Need automatically gets a HAS_DELIBERATION_GROUP relation to the same (Info) node.
Send email notification
Users need to be notified of changes to things they care about via email. We will send notification in the following cases:
- When user has been assigned to a role
- When description or title changes
- If user is guide or realizer
- When deliberation thread is added or removed
- If user is guide or realizer
- If user is guide or realizer for dependent node
- If user is guide or realizer of Responsibility or Need
- When dependency created to what user is guide or realizer for
Reassign Responsibility to other Need
A Guide or Realiser can change which Need a Responsibility fulfils.
Show user subgraph in profile
User profile should show subgraph of current user and a list of Needs and Responsibilities that user is related to.
Search for people and go to their profile
Searching for a user should be possible, and clicking on the user should take you to their profile and show you their subgraph.
UX/UI improvements
Guided formatting of Need and Responsibility descriptions
A Need is always written (We need to … so that … ) and a Responsibility always starts with the Need description, so that “We need to … so that … To do that …”. This should be guided or enforced in the UX/UI, either by pre-filling text or assisting somehow.
Icons on cards and titles to indicate vacancy
Users should be able to see if a Need or Responsibility has a Guide and Realizer assigned without opening the card.
Integrations
Realities connection to Loomio (Talk) API
Loomio has an API that is very easy to access and which can give all publicly available data in JSON format. We can periodically query Loomio for all publicly available groups and threads, to create Info nodes which we can then add create HAS_DELIBERATION and HAS_DELIBERATION_GROUP relations to.
Implement Ruby on Rails GraphQL API endpoint in Dreams
Eventually we want to show information from Realities on Dreams in order to get more people at the Borderland to understand the nuts and bolts that go into creating the conditions for their dreams to come true, and for the to become active participants in those processes. We also want to import all Dreams into the Realities database (but usually not show them) so that each Dream can have it’s own subgraph, and can define what Needs it has and which Responsibilities it depends on.
Ruby on Rails has a very good GraphQL endpoint package, used and maintained by GitHub, Shopify and Kickstarter. By implementing this in Dreams, we make it really easy for Dreams and Realities to talk to one another.
Realities connection to Dreams GraphQL API
Once we have a GraphQL connection to Dreams, we can periodically query Dreams for all public Dreams, Grants and Users and store this data in the Realities database for future development and experimentation.