TutorLoom
기업·대학·교육기관을 위한 학습 플랫폼, 무료 오픈소스이며 엔터프라이즈 버전 제공
KI 기반 선택 도우미: 정당을 의회 기록·투표·선거 공약으로 이해
Die KI-basierte Ergänzung zum Wahl-O-Mat: Verstehe Parteien anhand von Plenarprotokollen, Abstimmungen und Wahlprogrammen. Jetzt informiert wählen!
교육Python · TypeScriptGitHub @wahl-chat온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Source code of the wahl.chat platform. Our mission: Make politics more accessible.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A grounded political information chatbot for German elections — federal, state, and local.
Application: https://wahl.chat/ About: https://wahl.chat/about-us Press: https://wahl-chat.notion.site/press
The aim of wahl.chat is to enable users to engage in a contemporary way with the positions of political parties and to receive answers to individual questions that can be substantiated with sources.
| Directory | Description | Docs |
|---|---|---|
web/ | Next.js frontend application | README |
ai-backend/ | Python AI/RAG backend (FastAPI + SSE + LangChain) | README |
ingestion/ | Corpus layer: ingestion connectors, runner, and Qdrant collection setup | README |
packages/wahlchat-common/ | Code shared by the Python components | README |
firebase/ | Firebase config, Cloud Functions, Firestore rules & seed data | README |
brew install bun, or curl -fsSL https://bun.sh/install | bashcurl -LsSf https://astral.sh/uv/install.sh | shnpm install -g firebase-toolsNo production credentials needed. All data stores run locally.
make install
If you use an AI coding assistant, run ./scripts/setup-agent-docs.sh once to
symlink the provider-specific CLAUDE.md to the committed AGENTS.md (the
symlink is git-ignored; AGENTS.md is the source of truth).
cp ai-backend/.env.example ai-backend/.env
cp web/.env.example web/.env.local
# Only if you run ingestion connectors; otherwise they fall back to ai-backend/.env
cp ingestion/.env.example ingestion/.env
The .env.example files are pre-configured for local mode (QDRANT_URL=http://localhost:6333, FIRESTORE_EMULATOR_HOST=localhost:8081). You only need to fill in LLM API keys (OPENAI_API_KEY, GOOGLE_API_KEY) for the chat to work.
make stores-up
This starts Qdrant via Docker Compose (waiting on /readyz, then bootstrapping the collection) and the Firestore + Auth emulators via the Firebase CLI (Firestore on 8081 — avoids the default 8080 clash with the backend — and Auth on 9099). The target waits until the Firestore emulator answers before returning.
For the web app to actually use these emulators (rather than the real project), web/.env.local must set NEXT_PUBLIC_USE_FIREBASE_EMULATORS=true plus FIRESTORE_EMULATOR_HOST / FIREBASE_AUTH_EMULATOR_HOST — the web/.env.example ships with these enabled. With them set, no service-account key is needed and the browser signs in against the local Auth emulator, so a local session never writes to the real project.
FIRESTORE_EMULATOR_HOST=localhost:8081 make seed-local
Loads scrubbed fixture data (election contexts, parties, proposed questions) into the local Firestore emulator. The seed script refuses to run without FIRESTORE_EMULATOR_HOST set — it will never write to production.
make dev
Or start everything at once (stores + servers):
make dev-local
This starts both the Next.js frontend (localhost:3000) and the Python backend (localhost:8080).
make stores-down
| Target | Description |
|---|---|
make install | Install all dependencies (web via bun; Python members via one uv sync) |
make stores-up | Start Qdrant (Docker) and Firestore emulator (host process) |
make stores-down | Stop all local stores |
make seed-local | Load scrubbed fixtures into local stores (requires FIRESTORE_EMULATOR_HOST) |
make dev-local | Start stores + both dev servers |
make dev | Start both dev servers (assumes stores are already running) |
make run-pledgetracker | Ingest PledgeTracker pledges (Cambridge queue API; stub fixture by default) |
make test-backend | Run the Python unit tests (all three workspace members) |
make test-smoke | Run E2E SSE smoke test |
make test-local-mode | Run the seed-script emulator-guard tests (needs live local stores: make stores-up first) |
make lint | Lint web (biome) + all Python members (ruff) |
We appreciate contributions from our community. Please take a look at the open issues if you are interested. If you are unsure where to start, please contact [email protected].
This project is source-available under the PolyForm Noncommercial 1.0.0 license. Please contact [email protected] for commercial use inquiries.