consensus

vote for topics for your next meeting

npm install consensus
17 downloads in the last week
34 downloads in the last month

Consensus

Imagine a Google Moderator that didn't make you tear your hair out. That's Consensus.

NPM

What's that when it's at home?

Consensus is a tool for counting votes on topics proposed by its users. Topics are grouped into "agendas", which are lists of things to consider at meeting. Any Consensus user can create an agenda. Any Consensus user can propose a topic for any agenda. Votes are private only in the sense that they're not exposed by default in the UI, though you could show them if you wanted.

Here's a quick demo movie showing what it does.

Better yet: here's a demo site that you can try out.

Use it anywhere where you'd like a medium-sized group of people to vote on things regularly.

Features

  • automatic account provisioning & signin via Mozilla Persona
  • "agendas" to group proposed topics by meeting
  • open topic proposal
  • open voting
  • changeable votes
  • markdown formatting for everything with a description
  • presentation mode for meetings to review open requests

Operational requirements

Consensus stores its data in a set of leveldb databases, which are saved on disk. You'll wish to have sufficient fast disk to support your expected use. For small, less-active installations, just about anything will do. You'll also want to back those files up if the data Consensus stores is valuable to you.

Consensus makes no attempt to restrict access to the data or to account creation. If you have access to the site, you can create an account using Mozilla Persona. It is intended to be used behind a firewall. Note that it must be able to make outgoing connections at least to verifier.login.persona.org:443 to verify user identities.

Installing

Clone the repo or npm install consensus. Copy the sample config file in config.json.sample to config.json and edit to your satisfaction.

{
    "name": "My Site Name",
    "port":    3000, // may be overridden by setting PORT env var
    "dbpath":  "/var/db/consensus",
    "logging": 
    {
        "path": "/var/log/consensus",
        "console": false
    },
    "secrets": ["your cookie secret passphrase thingie", "which get passed to keygrip" ],
    "avatars.io":
    {
        "public":  "your-public-access-token",
        "private": "your-private-oauth-token",
        "appid":   "your-app-id"
    }
}

You may also pass in the location of the config file using the CONFIG_FILE environment variable.

Install dependencies: npm install.

Then start the app: npm start.

Avatars.io integration

Consensus can use avatars.io to provide custom avatars for your users. You will need to sign up for a free application account and modify the config file to supply your tokens.

Customizing

The CSS framework is Bootstrap 3.0. You should be able to drop in any Bootstrap theme or customized CSS to style the app your way. The LESS files used to customize the colors are all available in ./build/less. Simply run bower install and then make to compile the css.

API

A few json endpoints are implemented. Eventually there will be more in support of whatever in-browser interactivity I need.

Hat-tips

This project was greatly enhanced by the following open-source projects:

See also its hackers.txt, generated by hacker-deps.

TODO before I call it 1.0

  • add anonymous voting
  • show winning topics more clearly
  • implement delete account
  • make it a js in-page app
  • switch socket.io to primus
  • use websockets to do streaming updates
  • improve config & deployment story
  • maybe write one test
  • fall back to gravatars without avatars.io integration
  • improve avatar upload cosmetics
npm loves you