{"id":20394548,"url":"https://github.com/cafca/metawahl","last_synced_at":"2025-04-12T12:12:53.181Z","repository":{"id":39845081,"uuid":"106303154","full_name":"cafca/metawahl","owner":"cafca","description":"Tracking changes in stances of Germany's political parties over time","archived":false,"fork":false,"pushed_at":"2023-01-05T00:08:35.000Z","size":14865,"stargazers_count":20,"open_issues_count":40,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T12:12:47.488Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://metawahl.de","language":"JavaScript","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/cafca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-09T15:43:42.000Z","updated_at":"2024-08-22T16:33:30.000Z","dependencies_parsed_at":"2023-02-03T01:16:13.766Z","dependency_job_id":null,"html_url":"https://github.com/cafca/metawahl","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafca%2Fmetawahl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafca%2Fmetawahl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafca%2Fmetawahl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafca%2Fmetawahl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cafca","download_url":"https://codeload.github.com/cafca/metawahl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248565082,"owners_count":21125418,"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-11-15T03:53:33.893Z","updated_at":"2025-04-12T12:12:53.157Z","avatar_url":"https://github.com/cafca.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Metawahl Logo](https://raw.githubusercontent.com/ciex/metawahl/master/metawahl_logo.png)\n\n# Metawahl [![Build Status](https://travis-ci.org/ciex/metawahl.svg?branch=master)](https://travis-ci.org/ciex/metawahl)\n\nMetawahl verbindet Wahlergebnisse aus den letzten 16 Jahren mit über 21.000 Parteipositionen aus dem Wahl-o-Maten. Dabei wird sichtbar: Hat eine Mehrheit für eine Idee gestimmt – oder dagegen?\n\nDieses Repository enthält den Quellcode für Server und Client der dazugehörigen\nWebsite.\n\n## Wie Metawahl funktioniert\n\n### Parteien wollen unterschiedliche Politik machen\n\nBei Wahlen geben wir Parteien unsere Stimme, damit diese in unserem Namen Entscheidungen treffen. Jede Partei vertritt dabei unterschiedliche Positionen zu ausstehenden Entscheidungen.\n\nAber in welchen Punkten unterscheiden sich die Parteien eigentlich genau voneinander? Der Wahl-o-Mat der Bundeszentrale für politische Bildung ist enorm erfolgreich darin, uns zu zeigen, welche Fragen wir ihnen stellen können um sie klar voneinander zu trennen.\n\n### Aber welche Politik hat die Wahl gewonnen?\n\nNach der Wahl wissen wir, welche Parteien die meisten Stimmen bekommen haben. Wenn Parteien und Positionen sich einfach in links und rechts teilen ließen, wäre damit auch klar, welche Positionen gewonnen haben.\n\nAber was ist, wenn Parteien sich in vielen verschiedenen Richtungen gegenüberstehen? Wenn eine klassisch konservative Partei auch linke Postionen vertritt, oder eine klassisch linke Partei auch für konservative Interessen einsteht? Welche Politik hat jetzt die Mehrheit der Wählerstimmen bekommen? Genau das zeigt Metawahl für viele Wahlen in Deutschland, durch eine Verbindung der Fragen und Antworten aus dem Wahl-o-Mat mit den jeweiligen Wahlergebnissen.\n\n### Oft unter einem Kompromiss\n\nDie Position mit einer Mehrheit ist dabei nicht immer die, die von den meisten Wählern gewünscht wird. Bei Abstimmungen unserem repräsentativen Wahlsystem werden auch ungewünschte Positionen mit eingekauft, weil es nur eine begrenzte Anzahl an Parteien auf dem Wahlzettel gibt.\n\nAuf Metawahl findest du heraus, welche Positionen unter diesem Kompromiss eine Mehrheit der Wählerstimmen bekommen haben.\n\nIn den Thesen spiegelt sich auch, wie sich die Position der Wähler oder einer Partei über die Zeit entwickelt hat und wie sie unterschiedlich sie bei Wahlen in Europa, den Bundestags- und verschiedenen Landtagswahlen sein kann.\n\n# Installation\n\n## Server\n\nDer Server wurde als Flask app (Python) entwickelt und bietet eine JSON\nAPI, die vom Client angesprochen wird um Daten abzurufen und Nutzereingaben \nzu speichern. Dazugehörige Quellen finden sich im Verzeichnis `/api`.\n\n    $ git clone https://github.com/ciex/metawahl.git\n    $ cd metawahl/api\n    $ pipenv sync\n    $ pipenv run python app/main.py\n\nUm den Server dauerhaft laufen zu lassen, sollte dieser z.B. als uWSGI Awendung \nüber einen Webserver wie Nginx laufen. Hierzu:\n\n1. Server-Einrichtung wie oben\n2. Firewall Port für die API öffnen (z.B. 9000)\n3. Analog zum Beispiel in `uwsgi.ini.sample` eine uWSGI Konfiguration \nerstellen. Hierbei unbedingt die letzte Zeile ent-kommentieren und ein SECRET eintragen.\n4. Systemd Unit File erstellen um uWSGI automatisch zu starten\n5. Nginx konfigurieren, so dass Anfragen an die entsprechende Domain an den \nMetawahl-Socket weitergeleitet werden.\n6. Memcached installieren (unter Ubuntu: `libmemcached-dev` und `zlib1g-dev` )\n\nEine ausführliche Anleitung hierzu findet sich zum Beispiel auf:\n\nhttps://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04\n\n## Dataset\n\nThe dataset needs to be downloaded and imported to a Postgresql database \navailable to the server. First, initialize the Git submodule containing the \ndataset.\n\n    $ git submodule init\n    $ git submodule update\n\nMake sure that a Postgres server is running and update the server config file \n`api/dev.conf.py` to include its connection URI.\n\n    SQLALCHEMY_DATABASE_URI=\"postgresql://localhost/metawahl\"\n\nNow you can import the dataset to the database:\n\n    $ cd api\n    $ python run scripts/reset_db.py\n    $ python run scripts/bootstrap_db.py\n\n## Client\n\nDie Benutzeroberfläche ist als React-Webapp umgesetzt. Nach Installation des\nServers:\n\n    $ cd metawahl/src/client/\n    $ npm install\n    $ npm start\n\n## Daten bearbeiten\n\nNur der Seitenbetreiber sollte Tags, Kategorien, etc. bearbeiten können um \nMissbrauch auszuschließen. Um sich als Admin einzuloggen muss in der Browser-Konsole\nder Local Storage Schlüssel `admin_key` auf den gleichen Wert gesetzt sein, wie\ndie Umgebungsvariable `METAWAHL_ADMIN_KEY` auf dem Server. \n\nDie Umgebungsvariable kann zum Beispiel über die Konfigurationsdatei `uwsgi.ini`\ngesetzt werden. Ist sie nicht gesetzt, wird beim Start des Server eine \nWarnung ausgegeben. \n\n## Updates\n\nDas Skript `deploy.sample.sh` kann angepasst werden, um eine bestehende \nInstallation von metawahl durch Ausfürung eines einzelnen Skripts zu \naktualisieren. Hierbei bleiben alle Daten bestehen, nur die Quellen für\nClient und Server werden auf den neusten Stand des Git-Repositorys gebracht.\n\n# Changelog\n\nVersion | Beschreibung\n--------|--------------\n1.9.0   | iFrame für Einbindung in Blogs, etc hinzugefügt. Viele Design-Verbesserungen.\n1.8.0   | Neues Design für Wahl-Übersicht, Quiz neu gestaltet\n1.7.0   | Backend Refactor und API-Dokumentation auf metawahl.de/daten/\n1.6.0   | Thematisch ähnliche Thesen auf jeder Thesenseite\n1.5.0   | Neues Format für die Startseite\n1.4.0   | Unterstützung von vorläufigen Wahlergebnissen\n1.3.0   | Kompakte Thesendarstellung\n1.2.0   | Bessere Quiz-Implementation\n1.1.0   | Quiz\n\n# Lizenz\n\nCopyright 2018 Vincent Ahrend\n\nLizensiert unter der GNU AFFERO GENERAL PUBLIC LICENSE 3.0 (Text der Lizenz \nin der Datei `./LICENSE`.)\n\nGefördert vom Bundesministerium für Bildung und Forschung\n\n![](https://raw.githubusercontent.com/ciex/mietlimbo/master/client/src/Graphics/logo-bmbf.svg?sanitize=true)\n![](https://raw.githubusercontent.com/ciex/mietlimbo/master/client/src/Graphics/logo-okfn.svg?sanitize=true)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcafca%2Fmetawahl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcafca%2Fmetawahl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcafca%2Fmetawahl/lists"}