Imagine a Google Moderator that didn't make you tear your hair out. That's Consensus.
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.
- 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
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.
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
.
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.
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.
A few json endpoints are implemented. Eventually there will be more in support of whatever in-browser interactivity I need.
This project was greatly enhanced by the following open-source projects:
See also its hackers.txt, generated by hacker-deps.
- 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