Self-hosted AI workspace for political research — chat with documents, search the Bundestag, generate reports.
Quick Start | Features | Screenshots | Architecture | Deployment | Credits
OpenSIN Chat is a self-hosted AI platform for political work, research, and knowledge management. Upload your documents (Bundestag papers, press releases, legislation drafts) and the AI answers questions only from your sources, with traceable citations. No hallucinations from thin air, no cloud dependency, zero telemetry.
A sovereign, independent product built by OpenSIN-AI and optimized for the German political sphere. Originally inspired by AnythingLLM, OpenSIN Chat has evolved into a purpose-built system for political research with specialized agents, politician databases, and compliance features.
git clone https://github.com/OpenSIN-AI/OpenSIN-Chat.git
cd OpenSIN-Chat/docker-opensin
cp .env.example .env
docker compose up -dThe container maps host port 43939 to internal port 3001. Open http://localhost:43939 after startup.
Important
Set FIREWORKS_AI_LLM_BASE_PATH and FIREWORKS_AI_LLM_API_KEY in .env to use Fireworks AI as the LLM provider. The SINator Pool Router URL goes in FIREWORKS_AI_LLM_BASE_PATH.
Note
For full setup instructions, environment variables, and bare-metal deployment, see DEPLOYMENT_GUIDE.md.
- Document Chat — PDF, DOCX, TXT, Markdown, web pages, YouTube transcripts
- Vector Databases — LanceDB, Chroma, Pinecone, Qdrant, Milvus, PGVector
- LLM Providers — Fireworks AI (primary, via SINator Pool Router); alternatives: OpenAI, Anthropic, Mistral, DeepSeek, Ollama (local), LM Studio
- AI Agents — automated research, web browsing, PDF creation, code execution
- MCP Compatible — integrate any external tool via Model Context Protocol
- Multi-User — permissions, workspaces, audit logs (Docker edition)
- Multilingual — German, English, and more
- Zero Telemetry — no PostHog, no CDN tracking, no outbound calls to third parties
- Politician Database — Bundestag API + Abgeordnetenwatch as structured sources (biographical data, mandates, votes, speeches). Semantic full-text search over plenary protocols via LanceDB vector index
- Deep Research Pipeline — automated web research (Search → Extract → Summarize) with source tracking. Async via job IDs, polling-capable
- OpenSIN PDF Reports — branded reports (cover, header, footer in OpenSIN blue
#009ee0) with table of contents, source lists, and politician references — generated directly from research jobs - Agent Plugins —
@politician-search,@deep-research,@generate-report,@orchestrator,@pdf-analyze,@browser-vision,@image-generation,@create-files— callable directly in chat - Fireworks AI Vision — multimodal image analysis via Fireworks AI models (minimax-m3, kimi-k2p5/6/7, qwen-3p7-plus). Upload images and the AI describes what it sees
- 3,000+ Tests — comprehensive frontend (Vitest) and server (Jest) test coverage
- ChatGPT-style UI — centered chat layout (max-w-800px), user message bubbles right-aligned, AI messages left-aligned
- Dark/Light Mode — toggle button in sidebar, full theme support with
light:CSS prefix system - Code Blocks — syntax highlighting with copy button, language label, bg/border styling in both modes
- Notepad — inline workspace notes with auto-save, pin, and delete (workspace_notes table)
- Grounding Badge — Sparkle icon badge showing when AI uses document sources (RAG)
- Auto-Summary Cards — document snippets preview in sidebar
- Mobile Responsive — 375px viewport, overlay panels, no horizontal overflow
- Loading Animation — 3-pulse dots during AI response
- Action Buttons — hover-only (TTS, Copy, Edit, Good Response, More) like ChatGPT/Claude
| Light Mode | Dark Mode | Mobile |
|---|---|---|
![]() |
![]() |
![]() |
flowchart TB
User(["Browser<br/>https://sinchat.delqhi.com"])
subgraph Cloudflare["Cloudflare Edge (DNS + Tunnel)"]
DNS["DNS Records"]
Tunnel["Tunnel Broker"]
end
subgraph Host["OCI VM (sin-supabase, 92.5.60.87)"]
Cloudflared["cloudflared<br/>(Tunnel Client)"]
Express["Express Server<br/>:3001 (bound to 127.0.0.1:38471)"]
Collector["Collector<br/>:8888<br/>(Document Parsing, OCR)"]
Frontend["frontend/dist/<br/>(Static Files)"]
end
subgraph Data["Persistence (local)"]
SQLite[("server/storage/<br/>opensin.db<br/>(Prisma + SQLite)")]
Files[("server/storage/<br/>uploads/, vectors/")]
end
subgraph LLM["LLM Backend"]
Fireworks["Fireworks AI<br/>(SINator Pool Router)"]
end
User -->|HTTPS| DNS
DNS --> Tunnel
Tunnel <-->|Outbound Tunnel| Cloudflared
Cloudflared -->|localhost:38471| Express
Express -->|"/"| Frontend
Express -->|"/api/*"| Express
Express -->|LLM calls| Fireworks
Express <--> SQLite
Express <--> Files
classDef cloud fill:#fff4e1,stroke:#f48120,color:#000
classDef mac fill:#e3f2fd,stroke:#1976d2,color:#000
classDef data fill:#f3e5f5,stroke:#7b1fa2,color:#000
classDef llm fill:#e8f5e9,stroke:#388e3c,color:#000
class DNS,Tunnel cloud
class Cloudflared,Express,Collector,Frontend mac
class SQLite,Files data
class Fireworks llm
OpenSIN-Chat/
├── frontend/ Vite + React 18 + TypeScript + Tailwind + i18next
├── server/ Node.js + Express + Prisma + SQLite/Postgres
│ └── utils/
│ ├── politician/ Politician DB (Bundestag + Abgeordnetenwatch)
│ ├── research/ Deep Research Pipeline
│ ├── reports/ PDF Report Generator
│ ├── orchestrator/ Workflow Engine for Agent Plugins
│ └── agents/ Agent Definitions
├── collector/ Python service for document ingestion and OCR
├── docker/ Original Docker setup (openafd)
├── docker-opensin/ OpenSIN-Chat Docker / Compose setup
├── cloud-deployments/ AWS, GCP, Azure, DO, Helm, OpenShift stubs
├── tests/ E2E and integration tests
├── scripts/ Deploy scripts (deploy-production.sh)
└── docs/ Architecture, ADRs, plans, runbooks
https://sinchat.delqhi.com — deployed on an OCI VM (sin-supabase) via Cloudflare Tunnel, Fireworks AI (SINator Pool Router) as LLM provider.
cd docker-opensin
cp .env.example .env
# Configure: SERVER_PORT, JWT_SECRET, SIG_KEY/SIG_SALT, LLM keys
docker compose up -dSee BARE_METAL.md and DEPLOYMENT_GUIDE.md.
An auto-deploy script polls origin/main and rebuilds automatically. Setup in docs/AUTO-DEPLOY.md.
- No credentials in the bundle or repo. Demo/onboarding passwords must never land in the frontend bundle, README, or commits
- Secret rotation. All keys in
.env(LLM providers,JWT_SECRET,SIG_KEY/SIG_SALT) are deployment-specific (openssl rand -base64 32) - Research SSRF protection. The Deep Research Pipeline blocks private/internal targets by default
- Job limits.
RESEARCH_MAX_ACTIVE_JOBS(default 3) andORCHESTRATOR_MAX_ACTIVE_WORKFLOWS(default 2) limit concurrent pipelines
See SECURITY.md for details.
- In-app docs: Available at
/docsin the running frontend (user manual, API reference, architecture, deployment runbooks) - Source docs: All Markdown files in
docs/are the single source of truth - Architecture decisions: ADRs in
docs/adr/ - Data sources:
docs/DATA-SOURCES.md— external API specs, rate limits, schema mapping - API reference:
docs/api.md
- Fork the repository
- Create your branch (
git checkout -b feature/amazing-feature) - Test your changes (
yarn test+yarn test:server) - Commit and push
- Open a Pull Request
See CONTRIBUTING.md for details. Code conventions, branching strategy, and commit format are documented there.
Distributed under the MIT License. See LICENSE for details.
OpenSIN Chat is a community fork of AnythingLLM, developed by Mintplex Labs Inc. under MIT license.
Without the excellent work of Timothy Carambat and the entire Mintplex team, the AnythingLLM community, and all contributors, this project would not be possible.
AnythingLLM is a full-stack application that enables you to turn any document, resource, or piece of content into context that any LLM can use as reference during chatting. Built and maintained by Mintplex Labs Inc. — used here as the foundation for OpenSIN Chat.
What we inherited from AnythingLLM: complete architecture (frontend, server, collector, vector DB layer), LLM/embedding/vector DB providers, agent framework, MCP integration, web scraping, security/auth/multi-user concept, @mintplex-labs/* NPM packages.
What OpenSIN Chat adds on top: complete rebranding (OpenSIN blue, German language, custom logo), telemetry fully removed (not just disableable), GDPR-affine defaults, political-use-case branding, Politician Database, Deep Research Pipeline, PDF Reports, Agent Plugins, REST APIs, test & CI infrastructure.
A full list of third-party components is in THIRD_PARTY.md.




