TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证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.