{"id":13905684,"url":"https://github.com/datamade/chi-councilmatic","last_synced_at":"2025-09-07T10:36:37.540Z","repository":{"id":32330476,"uuid":"35905827","full_name":"datamade/chi-councilmatic","owner":"datamade","description":":eyes: keep tabs on Chicago city council","archived":false,"fork":false,"pushed_at":"2025-08-13T19:45:30.000Z","size":28283,"stargazers_count":31,"open_issues_count":69,"forks_count":16,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-09-07T10:36:36.566Z","etag":null,"topics":["chicago","councilmatic"],"latest_commit_sha":null,"homepage":"https://chicago.councilmatic.org/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datamade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-05-19T20:09:47.000Z","updated_at":"2025-08-13T19:17:54.000Z","dependencies_parsed_at":"2023-02-15T10:47:01.268Z","dependency_job_id":"674b9d45-4a7a-4a1f-b669-d576fc67ca85","html_url":"https://github.com/datamade/chi-councilmatic","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/datamade/chi-councilmatic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datamade%2Fchi-councilmatic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datamade%2Fchi-councilmatic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datamade%2Fchi-councilmatic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datamade%2Fchi-councilmatic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datamade","download_url":"https://codeload.github.com/datamade/chi-councilmatic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datamade%2Fchi-councilmatic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274026707,"owners_count":25209739,"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","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["chicago","councilmatic"],"created_at":"2024-08-06T23:01:21.163Z","updated_at":"2025-09-07T10:36:37.478Z","avatar_url":"https://github.com/datamade.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# 👀 Chicago Councilmatic\n\nChicago Councilmatic tracks all things related to Chicago City Council: the legislation introduced and passed, its various committees and the meetings they hold, and the alders themselves.\n\nYou can search and browse legislation from 2011 onwards. Some interesting searches include:\n\n- changes in how properties are zoned\n- what the City is paying out in settlements\n- committee appointments\n- celebrating birthdays?!\n\nChicago Councilmatic is a free and easy way to access official Chicago City Council information.\n\n## Production data and SQLite archive\n\nIf you'd like to explore the data for Chicago Councilmatic yourself, we make a SQLite database using [Datasette](https://datasette.io/) available here: https://puddle.datamade.us/chicago_council. This data is updated nightly.\n\nThe data updates for the production instance of this site is done with GitHub actions in the https://github.com/datamade/chicago-council-scrapers repository. Data is also updated nightly.\n\n## Setup\n\nThese days, we run apps in containers for local development. Prefer to run the\napp locally? See the [legacy setup instructions](https://github.com/datamade/chi-councilmatic/blob/2e56e03cd689495899d8675ee97a65f672274cb9/README.md#setup).\n\n### Install OS level dependencies:\n\n- [Docker](https://www.docker.com/get-started)\n\n### Run the application\n\n```bash\ndocker-compose up\n```\n\n### Load in the data\n\nChicago Councilmatic needs to data work properly and the database is quite large (several GB). You can either restore from another database (faster) or scrape the data yourself.\n\n#### Option 1: Import data from production\n\nIf you have existing data, bring down your existing data \u0026 volumes\n\n```bash\ndocker-compose down --volumes\n```\n\nspin up just the postgres container. this will initialize your database\n\n```bash\ndocker-compose up postgres\n```\n\nin a new terminal window, shell into the postgres container\n\n```bash\ndocker exec -it CONTAINER_ID /bin/bash\npsql -d postgres -U postgres\n```\n\nin the PSQL interpreter, delete the old database\n\n```sql\nDROP DATABASE chi_councilmatic;\n```\n\nthen, exit out of PSQL and the container. while the postgres container is still running, run the `heroku pg:pull` command to restore the production data to your local database. This will take about an hour.\n\n```bash\nPGUSER=postgres PGPASSWORD=postgres PGHOST=127.0.0.1 PGPORT=32001 heroku pg:pull DATABASE_URL chi_councilmatic --app chi-councilmatic-production\n```\n\n#### Option 2: Scrape directly from the source\n\nThe `docker-compose-scrape.yml` file contains a service to scrape Legistar web API and\npopulate your database with standardized data on the council and its members,\nlegislation, and events. The default command scrapes all committees and people,\nand any events and legislation updated in the last 30 days or scheduled for a\nfuture date.\n\nTo import / update everything:\n\n```bash\ndocker-compose -f docker-compose-scrape.yml up\n```\n\nTo import / update bills from the past 30 days (window=30):\n\n```bash\ndocker-compose -f docker-compose-scrape.yml run scrapers pupa update --rpm=0 chicago bills window=30\n```\n\nTo import / update people:\n\n```bash\ndocker-compose -f docker-compose-scrape.yml run scrapers pupa update --rpm=0 chicago people\n```\n\nTo import / update events:\n\n```bash\ndocker-compose -f docker-compose-scrape.yml run scrapers pupa update --rpm=0 chicago events\n```\n\nThis may take a few minutes to an hour, depending on the volume of recent\nupdates! Once it's finished, head over to http://localhost:8000 to view your\nshiny new app!\n\n### Optional: Update the search index\n\nIf you wish to use search in your local install, add your shiny new data to your\nsearch index with the `rebuild_index` command from Haystack.\n\n```bash\ndocker-compose run --rm app python manage.py update_index --batch-size=100\n```\n\n### Set-up pre-commit\n\nPre-commit hooks are scripts that run on your local machine before every commit.\n\nWe use the [pre-commit](https://pre-commit.com/) framework to run code linters and formatters that keep our codebase clean.\n\nTo set up Pre-Commit, install the Python package on your local machine using\n\n```bash\npython -m pip install pre-commit\n```\n\nIf you'd rather not install pre-commit globally, create and activate a [virtual environment](https://docs.python.org/3/library/venv.html) in this repo before running the above command.\n\nThen, run\n\n```bash\npre-commit install\n```\n\nto set up the git hooks.\n\nSince hooks are run locally, you can modify which scripts are run before each commit by modifying `.pre-commit-config.yaml`.\n\n## Testing\n\nThis app provides a basic set of tests that hit all endpoints for the bills,\npeople, events, and organizations in your local database and ensure that nothing\nbreaks. To run them, add some data to your database, as described in\n[Load in the data](#load-in-the-data), then run `pytest` via `docker-compose`.\n\n```bash\ndocker-compose -f docker-compose.yml -f tests/docker-compose.yml run --rm app\n```\n\n## Team\n\n### Original project team\n\n- David Moore - project manager\n- Forest Gregg - Open Civic Data (OCD) and Legistar scraping\n- Cathy Deng - data models and loading\n- Derek Eder - front end\n- Eric van Zanten - search and dev ops\n\n### Maintenance\n\nChicago Councilmatic is maintained by [the DataMade team](https://datamade.us/team/).\n\n## Errors / Bugs\n\nIf something is not behaving intuitively, it is a bug, and should be reported.\nReport it here: https://github.com/datamade/chi-councilmatic/issues\n\n## Copyright\n\nCopyright (c) 2015-2023 Participatory Politics Foundation and DataMade. Released\nunder the [MIT License](https://github.com/datamade/chi-councilmatic/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatamade%2Fchi-councilmatic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatamade%2Fchi-councilmatic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatamade%2Fchi-councilmatic/lists"}