# 🦉 Crumbforest Quickstart

Schneller Einstieg in 3 Minuten!

## 📦 Voraussetzungen

- **Docker** & **Docker Compose** installiert
- **Python 3** (optional, für Tests)
- Mindestens ein **API Key** (OpenAI, Anthropic oder OpenRouter)

## 🚀 Installation

### 1. Setup ausführen

```bash
./setup.sh
```

Das Skript:
- ✅ Prüft alle Dependencies
- ✅ Erstellt `.env` Datei
- ✅ Baut Docker Images
- ✅ Startet alle Services
- ✅ Initialisiert Datenbank
- ✅ Verifiziert Installation

**Wichtig:** Trage deine API Keys in `compose/.env` ein:
```bash
# OpenRouter (empfohlen - unterstützt Embeddings + Completions)
OPENROUTER_API_KEY=sk-or-v1-...

# Oder einzelne Provider:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
```

**Tipp:** OpenRouter ist am flexibelsten - ein Key für Embeddings (OpenAI) UND Completions (Claude)!

**⚠️ WICHTIG:** Prüfe/setze diese Provider-Einstellungen in `compose/.env`:
```bash
# RAG Configuration - KORREKTE Einstellungen!
DEFAULT_EMBEDDING_PROVIDER=openrouter    # NICHT openai!
DEFAULT_EMBEDDING_MODEL=text-embedding-3-small
DEFAULT_COMPLETION_PROVIDER=openrouter
DEFAULT_COMPLETION_MODEL=anthropic/claude-3-5-sonnet
```

### 2. System starten

```bash
./start.sh
```

Startet alle Container und wartet, bis alle Services bereit sind.

### 3. Tests ausführen

```bash
./test.sh
```

Wähle aus:
- **Quick Test** - Basis-Tests (Health, API, DB)
- **Integration Test** - Kompletter RAG Flow
- **Alle Tests** - Quick + Integration

### 4. Logs ansehen

```bash
./logs.sh app         # FastAPI Logs
./logs.sh db          # MariaDB Logs
./logs.sh all         # Alle Logs
./logs.sh app -f      # FastAPI Logs (follow)
```

### 5. System stoppen

```bash
./stop.sh              # Stoppe Container
./stop.sh --remove     # Stoppe + entferne Container
./stop.sh --clean      # Stoppe + lösche ALLE Daten (⚠️)
```

## 📋 Alle Befehle im Überblick

| Befehl | Beschreibung |
|--------|--------------|
| `./setup.sh` | Komplettes Setup (nur einmal) |
| `./start.sh` | System starten |
| `./stop.sh` | System stoppen |
| `./test.sh` | Tests ausführen |
| `./logs.sh [service]` | Logs ansehen |

## 🌐 URLs

Nach dem Start erreichbar:

| Service | URL | Beschreibung |
|---------|-----|--------------|
| FastAPI | http://localhost:8000 | Hauptanwendung |
| Admin Login | http://localhost:8000/de/login | Admin Interface |
| API Docs | http://localhost:8000/docs | Swagger UI |
| Qdrant UI | http://localhost:6333/dashboard | Vector DB UI |

## 👤 Login Credentials

### Admin Account
```
Email:    admin@crumb.local
Password: admin123
```

### Demo Account
```
Email:    demo@crumb.local
Password: demo123
```

## 🧪 Schnelltest

```bash
# Health Check
curl http://localhost:8000/health

# Alle Routes
curl http://localhost:8000/__routes

# Provider Status
curl http://localhost:8000/admin/rag/providers

# Whoami
curl http://localhost:8000/__whoami
```

## 🔧 Troubleshooting

### Problem: Docker läuft nicht
```bash
# Prüfe Docker Status
docker info

# Starte Docker Desktop (macOS/Windows)
# oder Docker Daemon (Linux)
sudo systemctl start docker
```

### Problem: Port bereits belegt
```bash
# Prüfe welcher Prozess Port 8000 nutzt
lsof -i :8000

# Oder ändere den Port in docker-compose.yml
ports:
  - "8001:8000"  # Nutze Port 8001 statt 8000
```

### Problem: API Keys fehlen
```bash
# Öffne .env und füge Keys ein
nano compose/.env

# Oder setze sie als Environment Variables
export OPENAI_API_KEY=sk-...
./start.sh
```

### Problem: Database Connection Failed
```bash
# Prüfe DB Logs
./logs.sh db

# Warte länger auf DB
docker compose -f compose/docker-compose.yml exec -T db sh -c \
  'mariadb -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT 1"'

# Neustart erzwingen
./stop.sh --remove
./start.sh
```

### Problem: FastAPI startet nicht
```bash
# Prüfe App Logs
./logs.sh app -f

# Häufigste Ursachen:
# - Port belegt
# - Dependencies fehlen
# - Syntax Error in Code

# Rebuild erzwingen
cd compose
docker compose build --no-cache app
docker compose up -d
```

### ⚠️ KRITISCH: Code-Änderungen erfordern Rebuild!

**Es gibt KEIN Volume Mount für App-Code!** Der Code ist im Docker Image eingebacken.

```bash
# Nach JEDER Code-Änderung in app/:
cd compose
docker compose up --build -d

# Bei größeren Änderungen (Clean Build):
docker compose down
docker compose up --build -d
```

**Was erfordert einen Rebuild:**
- ✅ Änderungen in `app/*.py`
- ✅ Änderungen in `app/routers/*.py`
- ✅ Änderungen in `app/lib/**/*.py`
- ✅ Änderungen in `app/services/*.py`
- ✅ Änderungen in `app/requirements.txt`
- ❌ Änderungen in `compose/.env` (nur Restart)
- ❌ Änderungen in `docs/*.md` (nur Restart für Re-Index)

## 📚 Weitere Dokumentation

- **[CLAUDE.md](CLAUDE.md)** - Projekt-Übersicht & Architektur
- **[DIARY_RAG_README.md](DIARY_RAG_README.md)** - Diary RAG System
- **[compose/README.md](compose/README.md)** - Docker Setup (falls vorhanden)

## 📚 Document Auto-Indexing

**NEU:** Markdown-Dokumente werden automatisch beim Start indexiert!

### Dokumenten-Ordner

```bash
docs/
  ├── rz-nullfeld/      # RZ Nullfeld Dokumentation
  └── crumbforest/      # Crumbforest Dokumentation
```

### Automatischer Index

Beim Docker-Start werden alle `.md` Dateien:
- ✅ Automatisch in Qdrant indexiert
- ✅ Mit File-Hash-Tracking (nur bei Änderungen)
- ✅ In separate Collections sortiert
- ✅ DSGVO-konform geloggt

### Qdrant Collections

Nach dem Start verfügbar:
- **docs_rz_nullfeld_** - RZ Nullfeld Docs
- **docs_crumbforest_** - Crumbforest Docs
- **diary_child_{id}_** - Kinder-Tagebücher

### Dokumente durchsuchen

**Im Browser (nach Login):**
```
http://localhost:8000/api/documents/search?q=Docker&limit=5
http://localhost:8000/api/documents/search?q=Python&limit=5
http://localhost:8000/api/documents/search?q=Qdrant&limit=5
```

**Beispiel-Response:**
```json
{
  "query": "Docker",
  "results": [
    {
      "post_id": 2032991606,
      "title": "ssh_login_test",
      "header": "Dockerfile Ergänzung",
      "content": "## 2. 🌧️ Dockerfile Ergänzung\n\n```Dockerfile",
      "score": 0.5505129,
      "collection": "docs_crumbforest"
    },
    {
      "post_id": 676631428,
      "title": "crumbforest_specialist_roles",
      "header": "🐋 DockerDuke – Container-Kapitän",
      "content": "## 🐋 DockerDuke – Container-Kapitän\n**#duke #docker**...",
      "score": 0.5469476,
      "collection": "docs_crumbforest"
    }
  ],
  "provider": "openrouter"
}
```

**Via cURL:**
```bash
# Suche in allen Dokumenten
curl -X GET "http://localhost:8000/api/documents/search?q=docker&limit=5" \
  -H "Cookie: session=..."

# Suche nur in Crumbforest Docs
curl -X GET "http://localhost:8000/api/documents/search?q=terminal&category=crumbforest" \
  -H "Cookie: session=..."

# Indexing Status prüfen
curl -X GET "http://localhost:8000/api/documents/status" \
  -H "Cookie: session=..."
```

### Manuell Re-Indexieren

```bash
# Alle Dokumente neu indexieren
curl -X POST "http://localhost:8000/api/documents/index" \
  -H "Content-Type: application/json" \
  -H "Cookie: session=..." \
  -d '{"provider": "openrouter", "force": true}'

# Nur eine Kategorie
curl -X POST "http://localhost:8000/api/documents/index" \
  -H "Content-Type: application/json" \
  -H "Cookie: session=..." \
  -d '{"category": "crumbforest", "provider": "openrouter"}'
```

## 🎯 Nächste Schritte

1. **Admin UI erkunden**
   ```bash
   open http://localhost:8000/de/login
   ```

2. **API testen**
   ```bash
   ./test.sh
   ```

3. **Dokumente durchsuchen**
   ```bash
   # Nach Docker-Start sind ~286 Markdown-Dateien indexiert
   curl http://localhost:6333/collections
   ```

4. **Diary RAG testen**
   ```bash
   # Siehe DIARY_RAG_README.md für Beispiele
   curl -X POST http://localhost:8000/api/diary/index ...
   ```

5. **Eigene Features entwickeln**
   - Neuer Router: `app/routers/my_feature.py`
   - In `app/main.py` mounten
   - Mit `docker compose restart app` neu laden

## 💡 Tipps

### Schneller Restart
```bash
# Nur App Container neustarten (schneller)
docker compose -f compose/docker-compose.yml restart app
```

### Live Logs
```bash
# Alle Logs in Echtzeit
./logs.sh all -f

# Nur Errors
./logs.sh app -f | grep ERROR
```

### Database Zugriff
```bash
# MySQL Shell
docker compose -f compose/docker-compose.yml exec db \
  mariadb -u crumb -p crumbforest

# Query ausführen
docker compose -f compose/docker-compose.yml exec -T db sh -c \
  'mariadb -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE \
  -e "SELECT * FROM users;"'
```

### Qdrant Zugriff
```bash
# Collections listen
curl http://localhost:6333/collections

# Collection Details
curl http://localhost:6333/collections/diary_child_1
```

## 🦉 Wuuuuhuuu!

Das wars! Du bist bereit loszulegen.

Bei Fragen oder Problemen:
1. Prüfe die Logs: `./logs.sh app -f`
2. Schaue in CLAUDE.md für Details
3. Führe Tests aus: `./test.sh`

**Happy Coding! 💚**
