Initial commit: site code, layouts, content (images added separately)

Fixes duplicate placeholder cover image on the 3 newest blog posts,
broken aspect-ratio classes on the albums listing page, and a
non-responsive fixed sidebar on the chat page.
This commit is contained in:
Dr. Jones
2026-07-08 06:18:17 +00:00
commit d9961a76ad
80 changed files with 9438 additions and 0 deletions

112
scripts/CHAT_API_README.md Normal file
View File

@@ -0,0 +1,112 @@
# Chat API Server
This Flask-based API server provides a secure interface for the chat feature, connecting users to the Ollama model.
## Features
- **Secure**: Input sanitization, rate limiting, CORS protection
- **Rate Limited**: 10 requests per minute per IP address
- **Context Aware**: Maintains conversation history (last 5 messages)
- **Auto-restart**: Runs as systemd service with automatic restart
## Configuration
**Environment Variables:**
- `OLLAMA_HOST`: Ollama endpoint (default: `http://10.30.20.110:11434`)
- `OLLAMA_MODEL`: Model name (default: `drjones-posts-to-much`)
- `PORT`: API server port (default: `5000`)
- `CHAT_API_KEY`: Optional API key for additional security (not set by default)
## Service Management
```bash
# Start service
sudo systemctl start hugo-chat-api.service
# Stop service
sudo systemctl stop hugo-chat-api.service
# Enable at boot
sudo systemctl enable hugo-chat-api.service
# Check status
sudo systemctl status hugo-chat-api.service
# View logs
sudo journalctl -u hugo-chat-api.service -f
```
## API Endpoints
### POST `/api/chat`
Send a chat message and get AI response.
**Request:**
```json
{
"message": "How do I maintain sterile conditions?",
"history": [
{"role": "user", "content": "Previous message"},
{"role": "assistant", "content": "Previous response"}
]
}
```
**Response:**
```json
{
"response": "AI response text...",
"model": "drjones-posts-to-much"
}
```
### GET `/api/health`
Health check endpoint.
**Response:**
```json
{
"status": "healthy",
"model": "drjones-posts-to-much",
"ollama_host": "http://10.30.20.110:11434"
}
```
## Security Features
1. **Rate Limiting**: 10 requests per minute per IP address
2. **Input Sanitization**: Removes dangerous characters, limits length to 1000 chars
3. **CORS Protection**: Only allows requests from configured origins
4. **Error Handling**: Graceful error handling with user-friendly messages
## Installation
1. Install dependencies:
```bash
pip3 install flask flask-cors ollama
```
2. Enable and start service:
```bash
sudo systemctl daemon-reload
sudo systemctl enable hugo-chat-api.service
sudo systemctl start hugo-chat-api.service
```
## Troubleshooting
**Service won't start:**
- Check logs: `sudo journalctl -u hugo-chat-api.service -n 50`
- Verify Ollama is accessible: `curl http://10.30.20.110:11434/api/tags`
- Check port 5000 is available: `sudo lsof -i :5000`
**Rate limit errors:**
- Normal behavior - users are limited to 10 requests per minute
- Rate limit resets after 1 minute
**Connection errors:**
- Verify Ollama endpoint is correct and accessible
- Check firewall rules allow connections to port 5000