PROJECT 16 / VENTURES & INDEPENDENT WORK
I run the stack I design for
A self-hosted, Dockerised AI production server running local models and an original n8n pipeline that assembles and publishes video end to end with no manual editing.
- Role
- Designer, builder and operator
- Where
- Self-directed
- When
- Ongoing
CONTEXT
Why a designer builds servers
Most AI product design happens at one remove: you use a hosted model through an interface someone else built, and you inherit their assumptions about latency, failure, cost and control. I wanted the assumptions to be mine, so I built the thing.
olajidai is a Linux host running Ubuntu Server on consumer hardware, provisioned from bare metal, OS and drivers, key-based SSH hardened onto a non-default port, static networking through nmcli and Netplan, and remote access over Tailscale and SSH tunnelling rather than anything exposed to the public internet.
On top of it runs a multi-service Docker Compose stack I assembled and maintain: n8n for orchestration, Ollama serving local quantized models, Open WebUI, Whisper for speech-to-text, Kokoro for text-to-speech, MinIO for object storage, Caddy as reverse proxy and Portainer for management, with a second GPU node running ComfyUI and Flux Schnell for image generation. The n8n image is a custom multi-stage build of my own, because I needed a full FFmpeg inside a hardened container and no published image had one.
THE PIPELINE
A schedule-triggered workflow that produces finished video with no human in the loop.
- Pull the queue from Google Sheets
- Generate the script with a locally served LLM
- Synthesize the voiceover with Kokoro
- Generate imagery through the ComfyUI HTTP API
- Transcribe the voiceover with Whisper for caption timing
- Assemble the MP4 with FFmpeg, Ken Burns motion, burned-in captions, rotating music beds
- Upload through the YouTube Data API over OAuth2
WHAT IT TAUGHT ME
Running the stack changes what you believe about designing on top of it. Latency stops being a spinner and becomes a budget you spend somewhere. Model failure stops being an error state you mock and becomes a thing you have watched happen at three in the morning to a queue that had to be full by breakfast. Cost stops being a pricing page and becomes a GPU that is either busy or idle.
The pipeline runs multiple channels in production and replaced an earlier setup scattered across a desktop machine. The point was never the videos.
GALLERY