A 2013 Intel i5 running Docker, Traefik, and more ambition than any cloud subscription could handle.
Click any service to open it in a new tab
A decade-old Intel i5 still running circles around cloud subscriptions
3.20GHz ยท 4 cores ยท 4 threads
Ivy Bridge ยท 2012DDR3 ยท Sufficient for everything
No bottlenecksSitting idle most of the time
Mostly idleNo cloud VMs, no subscription hosting, no managed services. Just a desktop tower in a spare room, a Cloudflare tunnel, and a custom domain. The same machine that plays Plex also serves sd-ai.co.uk to the world.
AWS EC2, Cloudflare Pages, paid hosting, third-party CDNs. All of it.
~$0/month in hosting. Electricity: negligible. The hardware was already paid for.
The homelab powering everything โ Docker-based architecture with Traefik
services:
traefik:
image: traefik:v3.0
ports:
- "8080:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- CF_API_TOKEN=${CF_API_TOKEN}
mini-llm-app:
build: ./mini-llm
ports:
- "8501:8501"
crypto-dashboard:
build: ./crypto_dashboard_multi
ports:
- "5000:5000"
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
The AI agent framework running on this server โ scheduling, tools, memory, and orchestration
The labrador. Friendly, loyal, never sleeps. Running cron jobs at 3am with zero complaint. Warm, witty, gets things done without making a fuss.
Memory, scheduling, home server access, practical problem-solving
Dry wit, understated, resourceful before asking
The precision agent. Checks everything before it runs. Systematic, cautious, methodically breaks down risks. Named after the uncertainty principle for a reason.
Safety review, config auditing, risk assessment, config validation
Precise, methodical, no stone left unturned
The operator. Takes direction and executes. Fast, reliable, handles the heavy lifting. Name from Breaking Bad โ cooks without ego, delivers without drama.
Task execution, data processing, API integrations, pipeline ops
Quiet competence, no wasted motion
Node.js agent runtime with skills, memory, scheduling, and channel integrations. Handles Telegram, cron, sub-agents, and tool execution.
Scheduled agents โ cron-driven background tasks running 24/7
Daily 8am London โ searches 5 job boards, emails results
Daily โข cronOn-demand CSV/Excel analysis with visualizations
On-demandAgents run in isolated sessions, triggered by cron schedules or on-demand requests. Each gets a task brief, works autonomously, and delivers results.
Fine-tuned models, prediction pipelines, and knowledge graphs
Fine-tuned 4-layer GPT for UK legal questions. Intent classifier + 1032 stock answers = reliable answers at zero marginal cost.
Free, accurate UK legal info requires paid solicitor time for basic queries.
Fine-tuned model + intent classifier + stock fallback = reliable legal Q&A.
class MiniGPT(nn.Module):
def __init__(self, vocab_size, dim=1024, heads=16, layers=4):
self.embed = nn.Embedding(vocab_size, dim)
self.layers = nn.ModuleList([TransformerBlock(dim, heads) for _ in range(layers)])
self.norm = nn.LayerNorm(dim)
self.head = nn.Linear(dim, vocab_size, bias=False)
def forward(self, x):
x = self.embed(x)
for layer in self.layers:
x = layer(x)
return self.head(self.norm(x))
LSTM price predictions + RAG playground. Upload PDF, ask questions, get KG-powered answers from your documents.
Crypto markets are volatile; finding answers in documents is time-consuming.
LSTM predictions + RAG with knowledge graph retrieval from PDFs.
class LSTMModel(nn.Module):
def __init__(self, input_size=1, hidden_size=128, num_layers=2):
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, 1)
def forward(self, x):
out, _ = self.lstm(x)
return self.fc(out[:, -1, :])
model = LSTMModel()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
Real-time Indian stock market visualization. NSE/BSE data via yfinance, interactive Plotly charts.
Tracking Indian equities requires multiple paid tools.
Self-hosted Streamlit dashboard with real-time NSE data.
7 AI agents running a ยฃ500K paper portfolio โ no human trading desk
Each trade passes through a chain of specialised agents. CFO runs parallel, monitoring financials independently.
cron jobs, scheduled tasks, and visual workflow automation
Daily automated job search for Account/Finance roles in London. Searches 5 job boards, emails results.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_alert_email(subject, body_path):
with open(body_path, 'r') as f:
html_body = f.read()
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = GMAIL_USER
msg['To'] = GMAIL_TO
part = MIMEText(html_body, 'html')
msg.attach(part)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login(GMAIL_USER, GMAIL_APP_PASSWORD)
server.send_message(msg)
return msg['Message-ID']
Visual workflow automation. PDF processing, Google Sheets logging, data integrations.
Self-hosted entertainment infrastructure
Self-hosted Google Photos alternative. Face detection, categories, EXIF search.
โ :2342Tech choices, architecture decisions, and what I learned along the way
Isolation without overhead. Each service is self-contained, reproducible, crash-resistant.
Full control, zero subscription fees, privacy. $0/month hosting.