Giter Club home page Giter Club logo

vodle's Introduction

Contributor Covenant try the MVP Coverity Scan Build Status

Logo

A fair and efficient, interactive, general-purpose
group-decision app

Current State & Next Steps

We are on our way towards a First Stable Release (want to help?).

  • A Minimal Viable Product (MVP) is finished since end of June '22 and can be tried out online at app.vodle.it.

    --> Are you in a group of people that would be willing to try vodle with our support, to enable us to improve it further?

  • For now, we will use the MVP as a demonstrator to win contributors and testers, and to identify missing features for the First Stable Release (V1.0).

A few of them also here:

          

About the Project

vodle is developed by the FutureLab on Game Theory and Networks of Interacting Agents at the Potsdam Institute for Climate Impact Research, with contributions from the open-source community.

It is both Freeware (comes at no monetary cost) and FOSS/FLOSS (free/libre open-source software).

(Pronounciation: vəʊdl, as in vote, node, rode, total, yodel and zodiac, not as in model or noodle)

Vodle will help groups make better decisions – fairer, more efficient, more consensus-oriented, interactive, and for free. Its underlying algorithm is based on thorough science and makes sure that all participants get the exact same influence on the decision, and that the power any faction receives is proportional to their size. This distinguishes vodle from almost every other voting app, where even a slight majority can make all the decisions. With vodle, a majority of 51% has only 51% power rather than 100%. In vodle, voters can give all options a "wap" from 0 to 100 or can choose to delegate their waps of an option to another voter they trust. Based on the waps, vodle will determine the winner in a fair, proportional, and efficient way.

It's all based on science: Main article | Earlier article

This page is mainly for potential contributors and other people interested in how vodle works under the hood.

More details about the tool can be found in this more comprehensive introduction.

We also have a Website for end users: vodle.it.

Finally, vodle is also used for scientific research on collective decision making. If you want to perform some behavioral experiment with vodle, we are happy to adapt it to your needs.

Built With

ionic angular typescript couchdb

(back to top)

Getting Started

I simply want to use it!

You can easily set up a poll at app.vodle.it and then send the invite link to your participants.

If you want to try it out first in an existing demo poll, visit demo.vodle.it.

Even though it might still have some smaller bugs (you can do something about that), the app works quite decently already.

Later, when the First Stable Release is ready, you can alternatively install vodle as an app on your smartphone via certain app stores.

I want to learn about the project

You can read about the scientific basis for vodle in this research article.

Or you can simply talk to us by starting a new thread on our discussions page.

We are currently working towards improving this page to provide you with a detailed documentation of vodle's software architecture.

I want to set up a vodle database server for my group

While vodle can be used with our central database server, you can get improved performance and privacy if you set up your own database server to be used with vodle in your group. The vodle web app will guide you through the steps required for this. (You will mainly install a standard CouchDB Docker container on some machine that your group can access)

I may want to contribute

You are highly welcome to get involved in any of a number of ways! We have a whole page devoted to this here: CONTRIBUTING.md

(back to top)

Licenses

  • See here for vodle's main license
  • See here for the licenses of 3rd-party components used

(C) Copyright 2015–2022 Potsdam Institute for Climate Impact Research (PIK), authors, and contributors, see AUTHORS.

Disclaimer: We're Using GitHub Under Protest

This project is currently hosted on GitHub. This is not ideal; GitHub is a proprietary, trade-secret system that is not Free and Open Souce Software (FOSS). We are deeply concerned about using a proprietary system like GitHub to develop our FOSS project. We have an open discussion where the project contributors are actively discussing how we can move away from GitHub in the long term. We urge you to read about the Give up GitHub campaign from the Software Freedom Conservancy to understand some of the reasons why GitHub is not a good place to host FOSS projects.

If you are a contributor who personally has already quit using GitHub, please check this resource for how to send us contributions without using GitHub directly.

Any use of this project's code by GitHub Copilot, past or present, is done without our permission. We do not consent to GitHub's use of this project's code in Copilot.

Logo of the GiveUpGitHub campaign

vodle's People

Contributors

asumandang avatar dependabot[bot] avatar held99 avatar luomeiren avatar mensch72 avatar minna-xd avatar ochan12 avatar rakshitgondwal avatar semla avatar weblate avatar

Stargazers

 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

vodle's Issues

User can add private sticky notes to polls and options

add a "sticky note" icon in an appropriate place (probably the details sections) that opens a modal with a simple text field. entered note is then printed behind the icon. text is stored via setp(pid, "note", text) or setp(pid, "option."+oid+".note", text). these keys must be added to the list of keys to be stored in the user db rather than the poll db.

add poll admin role with certain privileges

these privileges can later be, e.g.

  • advance closing of poll
  • editing of existing options
  • deleting of options
  • adding of voters
  • moderating chat (once a chat has been realized)

improve coding style and clean-up code

Improve the typescript, angular/html, svg, and JSON coding styles to be more in line with common style guides like https://google.github.io/styleguide/tsguide.html
In particular for TS:

  • debate whether to use camelCase instead of snake_case throughout (although Jobst finds this really hard to read)
  • consider using 'single quotes' instead of "double quotes" throughout
  • verify which variables are public, private, const, static readonly etc.

BUT: do not slavishly follow any style guide without thinking! Well-justified exceptions should prevail, e.g.:

  • name all variables of type Map with a trailing _map to prevent the common error of confusing them with Records and wrongly using [...] instead of get()/set() and in instead of has().

simple database security if database accessed through ionic webserver

when couchdb access is routed through ionic webserver (as currently via proxy), verify that REST call meets basic security conditions:

  • added document has correct data structure and is not too large
  • requests from same (or any) IP address not too often (?)
  • other?
    also make webserver add the couchdb credentials to the request at this point, so that client (browser or app) do not need to know the credentials.
    --> for this, look up how to have code executed on server!

Add delegable proxy functionality

Add a "delegate rating(s)" button, allowing voters to specify other voters that they trust to make a rating in their interest. Details need to be discussed.

User management

  • change Username: registervoter and deregistervoter
  • if names are not the same as in storage -> change username of all documents
  • if first LogIn: save in storage
  • count user who have rated, show count on poll and poll results
  • set new poll: who is allowed to vote

user can configure a couchdb database server for use with vodle

on a dedicated "servers" page, all used servers are listed and via an add button, the user gets to a page where the procedure for setting up a vodle server is described:

  • installing and starting a couchdb instance (e.g. via docker)
  • setting an admin user and password on the server
    finally, it offers a button "configure the new server", asks for the admin credentials, and then uses couchdb-bootstrap to copy the necessary user and design docs included under src/couchdb to the new server.

user can adjust poll's starting time

On "draft poll" page, user can choose between "voting starts immediately", "voting starts at a specific date and time" and then enter that. (in both cases, voters can add options immediately)

improve single-option detail page

on the page where the support for an option is shown (with the barchart diagram):

  • make bottom line look the same as the rating row in the "openpoll" page (currently it only shows the support bar)
  • maybe add explanatory text
  • add history of approval and own rating as time-series
  • optionally: let voter change their rating here as well, showing consequence immediately

"show results" button and logics

after poll has closed:

  • when voter visits poll for the first time, ratings page is greyed out and overlayed with button "this poll is closed – show results?" that takes voter to the existing wheel-of-fortune animation
  • when voter revisits poll later, only a snapshot of the final wheel position and result is shown on top of the voter's list of ratings (which is frozen then)

Sharing is counter-intuitive

Disclaimer: This is a design decision point

I do understand the logic that shares are always given to the highest-rated option to which a specific fraction of participants can agree. But I would argue that the result of this at least looks counter-intuitive and might even not be in the interest of voters.
Screenshot 2022-04-06 at 11-14-15 vodle – everygroup's consensus
If two options are agreed to by the same 80% with a similar rating maybe they'd like to distribute their shares on the options. The current implementation implies a "the winner takes it all" logic. I think at the core of this lies the premise that in the end everybody still has exactly one vote/one share.
Of course, the current logic perfectly follows the basic principle of effective altruism, meaning that if one option is 0.001% more effective (here: more popular) than another one, I will donate all my money to the first option and nothing to the second. The question then is whether democracy/consensus should follow the same principles of maximum effectivity and all-or-nothing

prepare for later voter-based voting authorization

add a poll data item containing a singleton list of one unique public key. include the corresponding private key into the invite link. have each voter sign her voter id with it and publish as a voter data item. have each voter only use other voters' data who have published a vid signed with some key from the list.

(later the list may contain more than one key, and different voters will be given different keys)

Add an alternative, dialogue-based voting mode

Add a mode without rating sliders, where voters are only asked what their favourite is, what options they think possible compromises are, and how many voters they think could ultimately support those options. vodle would then generate an initial ratings profile from that information.

improve privacy when declining delegation requests

Make sure the sender of a delegation request does not learn the voter id of the recipient when the recipient declines the request (only when she accepts the request).

To do so, the response should be stored as a poll data item rather than as a voter data item, and should include the delegate_id in its body only when the response is "accept".

fix tally

probabilities do not always add up to 100% (they did at some point)

Add voter authorization

Make sure only authorized users may vote in a poll. Detailed design needs to be discussed.

User can ask to be guided in choosing their ratings

On the voting page, the user can ask vodle to guide her in setting her ratings. That takes her to a sequence of pages where:

  1. All options are listed in order of descending current approval, and she is asked what her favourite option is (radio buttons). She can also say she is undecided between several "best" options (the radio buttons turn into checkboxes then).
  2. It is explained that this option / these options will get a rating of 100 and that this means she definitely approves them, regardless of the opinions of others.
  3. It is explained that this option might not become the consensus and thus might only get a small or moderate probability of winning, and that even if it were a majority's favourite, it might only get 50%+ probability, and that therefore it is essential in vodle to think of possible compromise options that have larger consensus potential.
  4. All options are again listed in order of descending approval, with the favourites marked as such, and she is asked to check all that she considers "acceptable" (on an absolute scale) or "better than average" (with respect to what she thinks the others prefer).
  5. It is explained that these options will get a positive rating (and all others a zero rating), that the exact rating should depend on what she thinks the consensus potential of the options is, and that – maybe counterintuitively – the options with the largest potential will get the smallest rating. Two reasons are given for this: (i) the more people give an option a positive rating, the smaller the their individual ratings of this option need to be to make this option get a decent winning probability. (ii) the smaller the rating, the larger the incentive for those who also find the option acceptable to actually express this by also giving the option a positive rating.
  6. The selected acceptable options are again listed in the same order of descending approval, and for each the voter is asked to state via a slider what she thinks what percentage of the voters also find this option acceptable/better than average. The slider should probably come in from the right, to be consistent with the light approval bars on the standard voting page that also come in from the right, and to make vodles derivation of the ratings on the next page more comprehensible. Alternatively, the sliders could have the form of a light vertical bar coming in from the bottom, together forming in a vertical bar chart. In that case, it might however be difficult to place the option labels in a legible way. They should not come in from the left because that would be too easily confused with a rating.
  7. It is explained that based on this information. vodle will now set the voter's initial ratings in the following way: favourites get 100, inacceptable/worse than average options get zero, and an acceptable option gets 100 – estimated percentage of accepting voters + a safety margin of 5.
  8. A results page very similar to the actual voting page is shown listing the resulting ratings.
  9. After clicking "OK", it is explained that the user can adjust these ratings at any time, and the results page is annotated with hints explaining about the actual voting page's controls.

make ice cream demo

add a "demo" page containing a simulated poll where the user interacts with 19 other simulated voters.

Poll question: "Ice cream flavour for summer party"
Description: "You and your 19 friends throw a summer party and need to buy ice cream. Unfortunately only 10 liter containers are available, so you need to agree on one flavour only..."
Options: Chocolate, Lemon, cUcumber, Vanilla, Mint, Strawberry. Links to Wikipedia pages or funny related media items
Deadline: 1 minute after entering the page
At deadline: show a small notification that the poll closes, then automatically go to polling page, showing a "let's have another party" button taking the user to another, similar poll about selecting a movie to show, a juice flavour, a music genre, a location, ...

Dynamics: every second, one sim adjusts their ratings to match a randomly drawn approval ballot from the distribution below, by increasing/decreasing their ratings to slightly above/below the current cutoff value c, plus some random margin drawn from a beta(1,0) distribution with width (100-c) or c, respectively.

Approval distribution: 5% U, 5% CLV, 20% CV, 20% LV, 25% CVM, 25% LVS. If user abstains, this should lead to ca. 95% V + 5% U.

URLs:
https://en.wikipedia.org/wiki/Vanilla
https://en.wikipedia.org/wiki/Lemon
https://en.wikipedia.org/wiki/Chocolate
https://en.wikipedia.org/wiki/Mentha
https://en.wikipedia.org/wiki/Strawberry
https://en.wikipedia.org/wiki/Cucumber

database security when couchdb contacted directly from webbrowser / app

implement database security for the case where couchdb runs on an external server whose provider does not trust the ionic server host enough so that security could be delegated to ionic server.

  • either implement security measures directly within couchdb
  • or provide prepared docker package containing a couchdb and some simple webserver acting as gateway that implements security measures (structure and size of documents, frequency of access, etc.)

Add a "moderator" mode

Add a usage mode that moderators of live decision sessions may use to guide a group towards consensus. Details need to be discussed.

add popovers

  • add a "?" button on the top-right corner which, when activated, makes all gui elements show explanatory popovers.
  • implement popovers using https://valor-software.com/ngx-bootstrap/#/popover.
  • depending on device, make popovers behave like this:
    • on web, popover appears when hovered over element, disappears when leaving hover. elements work as normal.
    • on mobile devices, popover appears when element is clicked, disappears at next click. all normal functionality is disabled until clicking on "?" again or navigating to another page.

Password requirements

The app doesn't allow non-alphanumeric characters and in that case states one capital/non-capital letter is required which can also be mis-read as "exactly one" …

Add encryption

Make app instances exchange only encrypted data that only voters can decrypt. Detailed design needs to be discussed.

User label

  • put in menu: my profile with logininformation, small icon, Logout possibility, group members (admin can change)

Dark theme

  • Add a dark theme that users can choose in vodle's settings.
  • This will involve design, css editing, image manipulation, and reviewing effects in all corners of the UI
  • Also make the default theme (light or dark) follow the overall system settings

Help Pop-Up

For first time users, so people that might not be familiar with the idea (e.g. i might want to delegate my vote to my mom), a pop up of the "Wie stimmt man ab? - Kurze Version" or something similar would be nice, so that the basic principle and idea gets clear, as well as colour coding etc.

Delegation requirements

When leaving the delegate's name field empty, it's not possible to click any of the button (to potentially give you an error message). The field is not on first sight recognizable as such. At least my focus is on the second field of the senders address.

Once the name field is clicked and left empty, the message validation.delegate_nickname-required can be read below. It should be replaced by a(nother) string.

meet common accessibility standards

Make sure common accessibility standards are fulfilled, like working well with screen readers, increased contrast, enlarged font size, not relying on red/green distinction, etc.
Because we use advanced GUI elements such as date pickers and sliders, this might be hard and might require offering a "simplified" version with less complex elements.

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.