https://github.com/ceejbot/consensus
vote on topics for your next big meeting
https://github.com/ceejbot/consensus
Last synced: 8 months ago
JSON representation
vote on topics for your next big meeting
- Host: GitHub
- URL: https://github.com/ceejbot/consensus
- Owner: ceejbot
- License: mit
- Created: 2013-08-11T18:44:34.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2017-05-02T18:08:50.000Z (about 9 years ago)
- Last Synced: 2025-10-19T12:27:53.832Z (9 months ago)
- Language: CSS
- Size: 341 KB
- Stars: 17
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Consensus
Imagine a Google Moderator that didn't make you tear your hair out. That's Consensus.
[](https://nodei.co/npm/consensus/)
[](https://waffle.io/ceejbot/consensus)
## 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](https://cloudup.com/cWPa8l1RdsF).
Better yet: here's a [demo site](http://demo.consensoid.io/) 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](https://www.mozilla.org/en-US/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](https://www.mozilla.org/en-US/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.
```javascript
{
"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](http://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](http://getbootstrap.com). 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:
* [Mozilla Persona](https://www.mozilla.org/en-US/persona/)
* [levelup](https://github.com/rvagg/node-levelup)
* [express.js](http://expressjs.com)
* [Reveal.js](http://lab.hakim.se/reveal-js/)
* [Bootstrap](http://getbootstrap.com/)
* [1pxdeep](http://rriepe.github.io/1pxdeep/)
* [Font Awesome](http://fortawesome.github.io/Font-Awesome/)
See also its [hackers.txt](hackers.txt), generated by [hacker-deps](https://github.com/substack/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](http://primus.io)
- 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