'use client' import Link from 'next/link' import { ArrowLeft, Clock, Zap, BookOpen } from 'lucide-react' import { motion } from 'framer-motion' const sections = [ { chapter: 'Chapter 1', title: 'AWS Step Functions: The Foundation', period: '2022–2024', icon: '🏗️', highlights: [ 'Owned Distributed-Map end-to-end: design → production across 57+ regions', 'Sub-100ms P99 latency, 20x burst handling', 'Learned deployment alignment: frontend spec updates must sync with service deployments', 'Built Checkpoint recovery: customers resume mid-workflow without re-runs', 'Solved distributed edge cases: race conditions, concurrent updates, dedup', 'Oncall mastery: CloudWatch dashboards, runbooks, production debugging' ], keyLearning: 'Backward compatibility is invisible until it breaks silently. A missed spec change cascades across regions.' }, { chapter: 'Chapter 2', title: 'RBC: Infrastructure as Code & Observability', period: 'Nov 2024 – May 2025', icon: '⚡', highlights: [ 'Problem: Unstable deployments with 500+ resource state files, API rate-limits, race conditions', 'Solution: JFrog Artifactory backend + workspace prefixes, plan artifacts, -parallelism=5 throttle', 'Result: Zero state corruption, zero pipeline blockage', 'Problem: Configuration drift invisible for weeks, massive unreadable diffs', 'Solution: Nightly terraform plan -refresh-only -detailed-exitcode → Slack webhook', 'Result: Drift visibility from 3 weeks → <24 hours' ], keyLearning: 'Terraform wins for things that barely change. For K8s resources that churn (pods, configmaps), you need a different tool—GitOps.' }, { chapter: 'Chapter 3', title: 'Homelab: Building AWS from Scratch', period: 'May 2025 – Present', icon: '🚀', highlights: [ 'Question: How does LLM serving work at scale? Build it at home.', '4 bare-metal machines: 1 GPU node, 1 Dell PowerEdge, 2 mini-desktops', 'Discovery: Powerline adapters killed etcd consensus. Ran ethernet to garage.', 'Wildcard DNS via Cloudflare, HTTPS for all subdomains (cert-manager + Let\'s Encrypt)', 'GitOps split: Terraform for Talos machine config, ArgoCD for K8s resources', '99.2% uptime with Talos Linux, Cilium CNI, Longhorn, PostgreSQL HA, Prometheus+Grafana+Loki' ], keyLearning: 'Design infrastructure so AI can modify it easily. GitOps + immutable OS = no surprises.' }, { chapter: 'Chapter 4', title: 'Poimen: AI Meets Workflows', period: 'Building', icon: '🤖', highlights: [ 'Insight: AI is powerful because of context, tool-calling, and memory.', 'poimen-memory: Graph-RAG with wiki-link indexing, pgvector + OpenSearch hybrid search', 'poimen-workflows: Natural language → executable Temporal workflows via reasoning model', 'Activity Knowledge Base informs LLM about timeouts, retries, dependencies', 'Generic state machine: JSON workflow spec + JSONPath parameter chaining', '60% latency reduction for LLM serving (vLLM INT4 quantization, custom Go gateway)' ], keyLearning: 'Skill factory: each Temporal activity is independently refined. General-purpose workflow orchestration emerges.' } ] const technologies = { 'Infrastructure': ['Talos Linux', 'Kubernetes', 'Cilium CNI', 'Terraform', 'kustomize'], 'Data': ['PostgreSQL + HA', 'pgvector', 'Kafka/Redpanda', 'MinIO', 'Longhorn'], 'GitOps': ['ArgoCD', 'Forgejo', 'Docker-in-Docker'], 'Identity': ['Authentik OIDC', 'RBAC', 'SOPS encrypted secrets', 'cert-manager'], 'Observability': ['Prometheus', 'Grafana', 'Loki', 'Tempo', 'OpenTelemetry'], 'AI/ML': ['vLLM', 'Ollama', 'TEI', 'KServe', 'Temporal', 'Qwen3-32B'], } const keyInsights = [ { title: 'Deployment Alignment', description: 'When frontend consumes the latest API, you need backward-compat checks. A missed spec change breaks customers silently across all regions.', }, { title: 'Infrastructure as Code Split', description: 'Terraform for things that rarely change (machine config). GitOps for things that churn (pods, configmaps). Different tools, different philosophies.', }, { title: 'Network is Critical', description: 'Powerline adapters killed etcd consensus at 200ms latency. Ethernet cable to garage solved it. Hardware matters.', }, { title: 'AI-Friendly Infra', description: 'Design systems so AI can modify them. Declarative configs + clear abstractions = easier for models to reason about.', }, { title: 'Observability First', description: 'Drift detection <24hr. Prometheus + Grafana dashboards before you have problems. Not post-mortem tools.', }, ] export default function HomelabArticle() { return (
{/* Hero */}
Back to Homelab

Building AWS at Home:
A 3-Year Journey

From Step Functions to LLM inference—how distributed systems knowledge compounds.

12 min read
May 2025
{/* Main Content */}
{/* Intro */}

There's a difference between knowing how systems work in theory and building them in production. I've spent the last 3 years learning this difference the hard way—first at AWS, then at RBC, and now at home.

This is the story of how I learned distributed systems by owning every layer: from workflow orchestration to hardware networking, from GitOps to AI agents.

{/* Chapters */}
{sections.map((section, idx) => (
{section.icon}
{section.chapter}

{section.title}

{section.period}
{/* Highlights */}
    {section.highlights.map((highlight, i) => (
  • {highlight}
  • ))}
{/* Key Learning */}
Key Learning

{section.keyLearning}

))}
{/* Key Insights */}

Core Insights

{keyInsights.map((insight, idx) => (

{insight.title}

{insight.description}

))}
{/* Tech Stack */}

Technologies Mastered

{Object.entries(technologies).map(([category, techs]) => (

{category}

{techs.map((tech) => ( {tech} ))}
))}
{/* CTA */}

Want the full details?

Ask Poimen any technical question about the architecture, deployment strategies, or lessons learned.

Ask Poimen →
) }