📄
Part 1 article
Architecture of a Self-Hosted AI Stack

Running Kokoro TTS (8880), Whisper STT (8881), Audio Converter (8882), Ollama (11434), and ChromaDB (8000) on a Raspberry Pi 5 — port planning, resource constra…

📄
Part 2 article
Running Background Services That Survive SSH Logout

The nohup + disown pattern, the stdin redirect requirement (< /dev/null), why simple & fails, and how to verify service health after SSH logout.

📄
Part 3 article
PHP under Apache — The www-data Permission Model

Apache runs as www-data, not your user. SSH key ownership requirements (600 = owner only), file permission strategies (groups, ACLs), and why your CLI test pass…

📄
Part 4 article
Audio Format Conversion Pipeline

Kokoro always outputs WAV regardless of requested format. FFmpeg converts WAV → OGG/OPUS at 48kHz mono 48kbps. The exact command, bitrate choices, codec availab…

📄
Part 5 article
Building a Python HTTP Microservice for Audio Conversion

Zero-dependency Python HTTP server using stdlib http.server: handles multipart file upload, FFmpeg subprocess with timeout, and temp file cleanup — all in ~100 …

📄
Part 6 article
Reverse Proxy Architecture for Local AI Services

Nginx routing /tts → 8880, /stt → 8881, /llm → 11434. TLS termination, API key auth at the proxy layer, and per-service rate limiting.

← All Series