{"id":13428184,"url":"https://github.com/anishathalye/gavel","last_synced_at":"2025-05-15T19:00:18.286Z","repository":{"id":37850244,"uuid":"61972358","full_name":"anishathalye/gavel","owner":"anishathalye","description":"A project expo judging system 📊","archived":false,"fork":false,"pushed_at":"2025-03-22T01:28:30.000Z","size":783,"stargazers_count":456,"open_issues_count":9,"forks_count":246,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-05-08T18:50:47.612Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://anishathalye.com/gavel-an-expo-judging-system/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anishathalye.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-06-26T03:38:12.000Z","updated_at":"2025-04-23T22:16:17.000Z","dependencies_parsed_at":"2024-06-19T03:02:42.064Z","dependency_job_id":"932cef27-641b-47a1-8911-8f21e7ae4158","html_url":"https://github.com/anishathalye/gavel","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anishathalye%2Fgavel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anishathalye%2Fgavel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anishathalye%2Fgavel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anishathalye%2Fgavel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anishathalye","download_url":"https://codeload.github.com/anishathalye/gavel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254404337,"owners_count":22065639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T01:00:48.594Z","updated_at":"2025-05-15T19:00:18.145Z","avatar_url":"https://github.com/anishathalye.png","language":"Python","funding_links":[],"categories":["judging","Tooling"],"sub_categories":["Evaluating"],"readme":"\u003cimg src=\"https://raw.githubusercontent.com/anishathalye/assets/master/gavel/banner.png\" width=\"450\" alt=\"Gavel banner\"\u003e\n\n**Gavel** is a project expo judging system.\n\nGavel was originally built for HackMIT and first used at HackMIT 2015. It has\nbeen used by [dozens][users] of other events since then.\n\n**If you use Gavel for your event, please add yourself to [this list][users]!\nIt only takes a minute, and knowing that Gavel is helping real events helps\nkeep us going \u003c3**\n\n## Demo\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"http://www.anishathalye.com/2016/09/19/gavel-an-expo-judging-system/\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/anishathalye/assets/master/gavel/screenshot.png\" width=\"320\" alt=\"Gavel screenshot\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\nSee the demo video\n[here](http://www.anishathalye.com/2016/09/19/gavel-an-expo-judging-system/)!\n\n## Users\n\nSee [here][users] for a list of events that have used Gavel in the past.\n\n**If you use Gavel for your event, please add yourself to the list! It only\ntakes a minute, and knowing that Gavel is helping real events helps keep us\ngoing \u003c3**\n\nand adding yourself to the list helps keep me motivated to continue\nworking on the software :)\n\n## Design\n\nGavel is based on the method of pairwise comparisons. Before you use Gavel,\nit's *highly recommended* that you read about the philosophy behind the\nimplementation as well as hints on how to use it in practice. Read [this blog\npost][blog-1] first, and then read [this blog post][blog-2].\n\n## Status\n\nGavel is stable software. We've used it successfully at HackMIT, and a bunch of\nother hackathons and events have used it too.\n\nGavel is a pretty different way of doing judging. If you want to use this for\nyour hackathon or event, we highly recommend that you:\n\n* Deploy it and play around with it ahead of time to get a feel for how the\n  system works\n* Read the blog posts linked above to get an idea of how to structure the\n  judging process\n\nIf you have any questions, feel free to [email me][email].\n\nIf you're able to contribute to making Gavel better, that would be **awesome**!\nWe'd really appreciate any kind of input, especially pull requests.\n\n## Deployment\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/anishathalye/gavel/tree/master)\n\nThe latest stable version is the `master` branch (and it's signed and tagged).\nDevelopment happens in the `develop` branch.\n\nThe web application is written in **Python 3** using Flask. It also uses NumPy\nand SciPy for math stuff. Doing a `pip --no-cache-dir install -r requirements.txt` should\ninstall all the dependencies.\n\nThe application uses Postgres for the database, so you need to have that on\nyour server. You need to create a database, which you can do with `createdb\ngavel` (unless you're using a different database name). Before you use the app,\nyou need to initialize the database by running `python initialize.py`. **Note\nthat Gavel does not preserve database schema compatibility between versions.**\n\nIn order to send emails, you'll need to install Redis.\n\nWhen testing, you can run the app with `python runserver.py`.\n\nIn production, you should use something like [Gunicorn][gunicorn] to serve\nthis. You can run the app with `gunicorn -b :\u003cPORT\u003e -w \u003cnumber of workers\u003e\ngavel:app`. This is sufficient if you want to serve Gavel under its own domain\n(e.g. `judging.example.com`). If you are serving Gavel under a subpath, e.g.\n`example.com/judging`, you need to set the `SCRIPT_NAME` environment variable\n(e.g. by passing `-e SCRIPT_NAME=/judging` to Gunicorn). If you are running\nGavel behind a proxy server, be sure to set `PROXY=true` in Gavel's settings.\n\nFor sending emails, you'll also need to start a celery worker with `celery -A\ngavel:celery worker`.\n\n## Configuration\n\nBefore starting the app, copy `config.template.yaml` to `config.yaml` and set\nall the required settings (the ones that don't have default values).\n\nMost settings can either be set in `config.yaml` or set as environment\nvariables. There's more detailed documentation in `config.template.yaml`.\n\nIf you don't want to use the config file and use only environment variables,\nset the environment variable `IGNORE_CONFIG_FILE=true`.\n\n## Troubleshooting\n\nSee the [troubleshooting\nguide](https://github.com/anishathalye/gavel/wiki/Troubleshooting) in the Gavel\nwiki.\n\n## Use\n\nTo set up the system, use the admin interface on `/admin`. Log in with the\nusername `admin` and the password you set. Once you're logged in, you can input\ninformation for all the projects and judges.\n\nAs you add judges, they'll automatically get emails with invitation links.\nAfter that, the judging and ranking process is fully automated - the judge will\nbe able to read the welcome text, and then they'll be able to start judging.\n\nThe admin panel will rank projects in real time, ordered by their inferred\nquality (Mu).\n\n### Admin Panel Features\n\n* If you want to (temporarily) close the judging system, click the \"Close\"\n  button under \"Global Settings\"\n* If you need to force re-send the invite email, use the \"Email\" button for the\n  judge in the admin panel\n* If you need to manually give a judge a login link, direct them to\n  `/login/\u003csecret\u003e`\n* If you want to send the next available judge to a certain project, use the\n  \"Prioritize\" button\n* If you need to deactivate projects or judges at any point, use the \"Disable\"\n  button\n* If a project hasn't been judged yet, you can delete it using the \"Delete\"\n  button\n* If a judge hasn't started yet, you can delete them using the \"Delete\" button\n* If you need to see details for a project or judge, click on the item ID in\n  the admin panel\n    * If you need to edit a project (name, location, or description), you can\n      do so on the item detail page\n* If you want to sort the items in the admin panel, click on the table headers\n\n## Development\n\nInterested in hacking on Gavel? Awesome. See [DEVELOPMENT.md][development] for\na dev setup guide.\n\n## Notes\n\nIf you do end up using this for your competition or hackathon, I would love to\nhear about how it goes.\n\nIf anyone has questions, feel free to email Anish (me@anishathalye.com).\n\n## Contributing\n\nDo you have a feature request, bug report, or patch? Great! See\n[CONTRIBUTING.md][contributing] for information on what you can do about that.\n\n## Citation\n\nIf you use Gavel in any way in academic work, please cite the following:\n\n```bibtex\n@misc{athalye2016gavel,\n  author = {Anish Athalye},\n  title = {Gavel},\n  year = {2016},\n  howpublished = {\\url{https://github.com/anishathalye/gavel}},\n}\n```\n\n## License\n\nCopyright (c) Anish Athalye. Released under AGPLv3. See\n[LICENSE.txt][license] for details.\n\n[blog-1]: http://www.anishathalye.com/2015/03/07/designing-a-better-judging-system/\n[blog-2]: http://www.anishathalye.com/2015/11/09/implementing-a-scalable-judging-system/\n[issues]: https://github.com/anishathalye/gavel/issues\n[contributing]: CONTRIBUTING.md\n[license]: LICENSE.txt\n[development]: DEVELOPMENT.md\n[email]: mailto:me@anishathalye.com\n[gunicorn]: http://gunicorn.org/\n[users]: https://github.com/anishathalye/gavel/wiki/Users\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanishathalye%2Fgavel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanishathalye%2Fgavel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanishathalye%2Fgavel/lists"}