Author SHA1 Message Date
Claude 0829f5e603 Remove personal contact info from .env.example and README
Replace Andrea Sigrist's and Barbara's email addresses and names with
generic placeholders to avoid exposing personal contact information
in the public repository.

https://claude.ai/code/session_01Y6uFfnbjzxHoAYQYd2vyuS
2026-02-27 16:02:00 +00:00
gurixandClaude Sonnet 4.6 f509d984ba docs: add Docker Compose section to README
Documents the docker-compose.yml setup added in PR #7, including how
to start both services, volume mounts for persistent data, and common
operational commands (logs, rebuild).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 14:13:16 +01:00
Markus GrafandGitHub fdf674d8d6 Merge pull request #8 from gurix/claude/fix-email-loop-prevention-bD8vX
Add loop detection and automated sender handling
2026-02-26 22:20:15 +01:00
2 changed files with 34 additions and 5 deletions
+2 -2
View File
@@ -62,8 +62,8 @@ REGISTRATION_EMAIL=anmeldung@example.com
# ADMIN_EMAIL_CC is always included as Cc (comma-separated for multiple). # ADMIN_EMAIL_CC is always included as Cc (comma-separated for multiple).
# For testing, point all three to your own email address. # For testing, point all three to your own email address.
# --------------------------------------------------------------- # ---------------------------------------------------------------
ADMIN_EMAIL_INDOOR=andrea.sigrist@gmx.net ADMIN_EMAIL_INDOOR=indoor-leader@example.com
ADMIN_EMAIL_OUTDOOR=baba.laeubli@gmail.com ADMIN_EMAIL_OUTDOOR=outdoor-leader@example.com
ADMIN_EMAIL_CC=spielgruppen@familien-verein.ch ADMIN_EMAIL_CC=spielgruppen@familien-verein.ch
# --------------------------------------------------------------- # ---------------------------------------------------------------
+32 -3
View File
@@ -116,9 +116,9 @@ uv run chainlit run chat_app.py --port 8080 --host 0.0.0.0
| `ANTHROPIC_API_KEY` | (or the key for your chosen provider) | | `ANTHROPIC_API_KEY` | (or the key for your chosen provider) |
| `SMTP_HOST` / `SMTP_PORT` | For admin notification emails on registration completion | | `SMTP_HOST` / `SMTP_PORT` | For admin notification emails on registration completion |
| `IMAP_USERNAME` / `IMAP_PASSWORD` | Used as SMTP credentials | | `IMAP_USERNAME` / `IMAP_PASSWORD` | Used as SMTP credentials |
| `ADMIN_EMAIL_INDOOR` | Andrea Sigrist — notified when indoor group is booked | | `ADMIN_EMAIL_INDOOR` | Indoor group leader — notified when indoor group is booked |
| `ADMIN_EMAIL_OUTDOOR` | Barbara Gross — notified when outdoor group is booked | | `ADMIN_EMAIL_OUTDOOR` | Outdoor group leader — notified when outdoor group is booked |
| `ADMIN_EMAIL_CC` | Markus Graf — always CC'd on notifications | | `ADMIN_EMAIL_CC` | Admin — always CC'd on notifications |
IMAP variables (`IMAP_HOST`, etc.) are not required for the web chat — only for the email channel. IMAP variables (`IMAP_HOST`, etc.) are not required for the web chat — only for the email channel.
@@ -156,6 +156,35 @@ uv run python main.py
Completed registrations from both channels are stored in the same `DATA_DIR` (default: `data/`) and share the same admin notification configuration. Completed registrations from both channels are stored in the same `DATA_DIR` (default: `data/`) and share the same admin notification configuration.
### Docker Compose (recommended for production)
A `docker-compose.yml` is provided that runs both services together with shared persistent storage:
```bash
cp .env.example .env
# fill in .env, then:
docker compose up -d
```
| Service | What it runs |
|---|---|
| `web` | Chainlit web chat at `http://localhost:8000` |
| `email-worker` | Email polling agent (`main.py`) |
Both services mount `./data` for shared registration storage and `./openspec` (read-only) for the knowledge base. Restarting a service does not lose conversation state.
To view logs:
```bash
docker compose logs -f
```
To rebuild after a code change:
```bash
docker compose up -d --build
```
## Development ## Development
### Running tests ### Running tests