- Python 52.2%
- Shell 38.5%
- Dockerfile 9.3%
- Strip all Telegram references from CLAUDE.md (headless mode no longer sends notifications; Outline comments are the only output) - Remove automatic git push from MODE=generate - Add README.md explaining template purpose, structure, and setup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| litellm | ||
| n8n | ||
| seeder | ||
| traefik | ||
| workflows | ||
| .env.example | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| README.md | ||
demo-base
Template repository for KI ohne Umweg customer demos. Clone this repo as the starting point for each new demo — it provides a minimal, runnable infrastructure stack that works for every use case.
The actual demo logic (mock data, n8n workflow) is added on top by Claude Code, guided by a Demo Brief.
What's included
| Service | Purpose |
|---|---|
traefik |
Reverse proxy — HTTP locally, HTTPS via Let's Encrypt on the demo VPS |
postgres |
Shared database: n8n backend + demo_events event log |
litellm |
OpenAI-compatible LLM proxy — routes to Vertex AI or Ollama via .env |
n8n |
Workflow engine — auto-imports workflows/workflow.json on startup |
seeder |
Init container — creates schema and generates mock data once at startup |
Use-case-specific services (e.g. mailpit, minio, a custom frontend) are added per demo and are not part of this base.
Getting started
1. Clone and configure
git clone <this-repo> demos/<kundenname>
cd demos/<kundenname>
cp .env.example .env
Edit .env — at minimum set your LLM backend credentials. For local development with Ollama:
LLM_BACKEND=ollama
LLM_MODEL=llama3.1
OLLAMA_BASE_URL=http://ollama:11434
2. Start Claude Code
claude
CLAUDE.md is loaded automatically. Claude Code will ask for the Demo Brief URL and guide you through building the demo step by step.
3. Run the stack
After Claude Code has generated the demo files:
docker compose up
- n8n is available at
http://localhost:5678 - The seeder runs once and populates mock data
- The workflow is auto-imported into n8n
Repository structure
demo-base/
CLAUDE.md # Instructions for Claude Code (auto-loaded)
docker-compose.yml # Base services — extend, don't replace
.env.example # All required environment variables
traefik/
traefik.yml # Traefik configuration
n8n/
init-workflow.sh # Auto-imports workflows/*.json on n8n startup
litellm/
config.yml # LLM routing config (backend set via .env)
seeder/
seed.py # Placeholder — filled per use case by Claude Code
requirements.txt # Python dependencies for the seeder
workflows/ # Placeholder — workflow.json added per use case
Slot files (filled per demo)
| File | What goes here |
|---|---|
seeder/seed.py |
Use-case-specific mock data generation |
workflows/workflow.json |
n8n workflow export |
docker-compose.yml |
Additional use-case services (after # --- use-case services ---) |
.env.example |
Additional use-case environment variables |
README.md |
This file — rewritten per demo with customer-specific instructions |
Infrastructure files (do not modify)
traefik/, litellm/, n8n/init-workflow.sh — these are shared across all demos and should not be changed per use case.
LLM backend
n8n always calls http://litellm:4000/v1 — never a cloud API directly. The backend is configured in .env:
Vertex AI (default):
LLM_BACKEND=vertex_ai
LLM_MODEL=claude-sonnet-4-6
VERTEXAI_PROJECT=ki-ohne-umweg-prod
VERTEXAI_LOCATION=europe-west3
GOOGLE_APPLICATION_CREDENTIALS=/run/secrets/gcp-sa-key
Ollama (local):
LLM_BACKEND=ollama
LLM_MODEL=llama3.1
OLLAMA_BASE_URL=http://ollama:11434
Switching backends requires only .env changes — no workflow edits needed.
Deployment on the demo VPS
Set CUSTOMER_SLUG and DEMO_DOMAIN in .env:
CUSTOMER_SLUG=muster-gmbh
DEMO_DOMAIN=demo.ki-ohne-umweg.de
Traefik will expose n8n at https://n8n.muster-gmbh.demo.ki-ohne-umweg.de and handle SSL automatically via Let's Encrypt.