# CalChat

Kalender-App mit KI-Chatbot. Termine lassen sich per Chat in natuerlicher Sprache erstellen, bearbeiten und loeschen.

## Tech Stack

| Bereich | Technologie |
|---------|-------------|
| Frontend | React Native, Expo, Expo-Router, NativeWind, Zustand |
| Backend | Express.js, MongoDB, Mongoose, OpenAI GPT |
| Shared | TypeScript Monorepo mit npm Workspaces |
| Optional | CalDAV-Sync (z.B. Radicale) |

## Voraussetzungen

- Node.js (>= 20)
- npm
- Docker & Docker Compose (fuer MongoDB)
- OpenAI API Key (fuer KI-Chat)
- Android SDK + Java (nur fuer APK-Build)

## Projekt aufsetzen

### 1. Repository klonen

```bash
git clone <repo-url>
cd calchat
```

### 2. Dependencies installieren

```bash
npm install
```

Installiert alle Dependencies fuer Client, Server und Shared.

### 3. MongoDB starten

```bash
cd apps/server/docker/mongo
docker compose up -d
```

- MongoDB: `localhost:27017` (root/mongoose)
- Mongo Express UI: `localhost:8083` (admin/admin)

### 4. Server konfigurieren

```bash
cp apps/server/.env.example apps/server/.env
```

`apps/server/.env` bearbeiten:

```env
MONGODB_URI=mongodb://root:mongoose@localhost:27017/calchat?authSource=admin
OPENAI_API_KEY=sk-proj-...    # Eigenen Key eintragen
USE_TEST_RESPONSES=false       # true = statische Testantworten ohne GPT
LOG_LEVEL=debug
NODE_ENV=development
PORT=3000
```

### 5. Client konfigurieren

```bash
cp apps/client/.env.example apps/client/.env
```

`apps/client/.env` bearbeiten:

```env
# Fuer Emulator/Web:
EXPO_PUBLIC_API_URL=http://localhost:3000/api

# Fuer physisches Geraet im gleichen Netzwerk:
EXPO_PUBLIC_API_URL=http://<DEINE-LOKALE-IP>:3000/api
```

### 6. Server starten

```bash
npm run dev -w @calchat/server
```

Startet den Server auf Port 3000 (mit `tsx watch` - startet bei Dateiänderungen automatisch neu (oder sollte es zumindest)).

### 7. Client starten

```bash
npm run start -w @calchat/client
```

Dann im Expo-Menue die gewuenschte Plattform waehlen:
- `a` - Android Emulator
- `i` - iOS Simulator
- `w` - Web Browser

Oder direkt:

```bash
npm run android -w @calchat/client
npm run ios -w @calchat/client
npm run web -w @calchat/client
```

## CalDAV (optional)

Fuer CalDAV-Synchronisation kann ein Radicale-Server gestartet werden:

```bash
cd apps/server/docker/radicale
docker compose up -d
```

Radicale ist dann unter `localhost:5232` erreichbar. Die CalDAV-Verbindung wird in der App unter Einstellungen konfiguriert.

## Weitere Befehle

```bash
npm run format                          # Prettier auf alle TS/TSX-Dateien
npm run lint -w @calchat/client         # ESLint (Client)
npm run build -w @calchat/server        # TypeScript kompilieren (Server)
npm run build:apk -w @calchat/client    # APK lokal bauen (EAS)
```

## Projektstruktur

```
calchat/
├── apps/
│   ├── client/          # Expo React Native App
│   └── server/          # Express.js Backend
│       └── docker/
│           ├── mongo/   # MongoDB + Mongo Express
│           └── radicale/ # CalDAV Server
└── packages/
    └── shared/          # Geteilte Types und Utilities
```
