diff --git a/app/homelab/article/page.tsx b/app/homelab/article/page.tsx new file mode 100644 index 0000000..f4b353d --- /dev/null +++ b/app/homelab/article/page.tsx @@ -0,0 +1,301 @@ +'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 → + +
+
+
+ ) +} diff --git a/app/homelab/page.tsx b/app/homelab/page.tsx index e222939..29538d0 100644 --- a/app/homelab/page.tsx +++ b/app/homelab/page.tsx @@ -2,6 +2,7 @@ import Link from 'next/link' import { ArrowLeft } from 'lucide-react' +import { motion } from 'framer-motion' const skillCategories = [ { @@ -46,18 +47,10 @@ const skillCategories = [ }, ] -const coreCompetencies = [ - 'Multi-tenant GPU scheduling (sm70/Volta constraints)', - 'Zero-downtime GitOps deployments', - 'Service mesh patterns without Istio overhead', - 'Hybrid cloud networking (Cloudflare + bare-metal)', - 'Declarative IAM with OIDC claim mapping', -] - export default function HomelabPage() { return (
-
+
-

- Homelab: Self-Hosted Cloud Platform -

-

- AWS rebuilt from scratch at home—full stack from compute to observability. -

+ {/* Hero */} + +

+ Building AWS at Home +

+

+ A 3-year journey through distributed systems, from Step Functions to LLM inference. +

+

+ 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. +

+
- {/* Stats */} -
-
-
-
4
-
Nodes
+ {/* Chapter 1: Homelab */} + +
+
+ The Journey
-
-
20+
-
Services
+

+ Homelab: Building AWS from Scratch +

+

May 2025 – Present

+
+ +
+

+ The question: How does LLM serving work at scale? The only way to answer that was to build an entire cloud-like platform with SaaS fundamentals from scratch. 4 bare-metal machines, 1 GPU node, 1 Dell PowerEdge (now in the garage due to noise), and 2 mini-desktops. All running Talos Linux, a Kubernetes-native OS designed for immutability. +

+
+ + {/* Infrastructure section + diagram */} +
+

+ Infrastructure Layer +

+
+

+ 4-node bare-metal cluster (3 control plane + 1 worker) running Talos Linux—immutable, API-driven OS designed for Kubernetes. All wired ethernet to avoid etcd consensus issues. +

+
    +
  • Compute: Talos Linux nodes, machine config via Terraform
  • +
  • Networking: Cilium CNI, nginx ingress, Cloudflare Tunnel for zero-trust external access
  • +
  • Storage: Longhorn for distributed block storage with disk tagging, MinIO for S3
  • +
  • GitOps: ArgoCD with multi-source Applications and sync waves
  • +
-
-
99.2%
-
Uptime
-
-
-
60%
-
LLM Latency Cut
+ + {/* Cluster Topology Diagram */} +
+
+

Talos Cluster Topology

+

Control planes, worker GPU, storage, and networking architecture

+
+
+