ui: updated atlas and titan lab facts

This commit is contained in:
Brad Stein 2026-01-13 08:53:13 -03:00
parent c4949caebb
commit 8750fa24b7
2 changed files with 24 additions and 13 deletions

View File

@ -68,19 +68,25 @@
<section class="card"> <section class="card">
<div class="section-head"> <div class="section-head">
<h2>The Titan Story</h2> <h2>Titan Lab</h2>
<span class="pill mono">atlas + oceanus</span> <span class="pill mono">atlas + oceanus</span>
</div> </div>
<div class="copy"> <div class="copy">
<p> <p>
Titan Lab is my 25-node homelab with a production mindset: security, monitoring, and repeatable changes. The core is The Titan Lab is my 26-node (and growing) homelab with a production mindset: security, monitoring, and repeatable changes. The core is
<span class="mono">Atlas</span>, a GitOps-managed <span class="mono">k3s</span> cluster where most services are reconciled by <span class="mono">Atlas</span>, a GitOps-managed <span class="mono">k3s</span> cluster where services are reconciled by
<span class="mono">Flux</span>. <span class="mono">Flux</span>.
</p> </p>
<p> <p>
<span class="mono">Oceanus</span> is intentionally separated for validator workloads while still feeding data back into the same <span class="mono">Atlas</span> is my attempt to fully replace all online services that I need or use with self-hosted versions. I care
observability stack. Storage is tiered with Longhorn (<span class="mono">astreae</span> for system data and deeply about security both for the lab and the cluster and personally. My first hosted services was <span class="mono">VaultWarder</span>
<span class="mono">asteria</span> for user data), fronted by Traefik and backed by centralized identity via Keycloak. but now the cluster hosts everything from email to ai. In my freetime, I'm always working on <span class="mono">Atlas</span> with small
services or organization improvements to make it better and cleaner and cooler.
</p>
<p>
<span class="mono">Oceanus</span> is intentionally separated host for validator workloads while still feeding data back into the same
observability stack. SUI is a crypto currency I follow and believe in and so <span class="mono">Oceanus</span> is in my lab and is dedicated
hardware to extend their infrastructure and make the SUI project more resilient.
</p> </p>
</div> </div>
</section> </section>
@ -91,7 +97,7 @@
const skills = [ const skills = [
"Python", "Python",
"Linux", "Linux",
"Kubernetes (k3s)", "Kubernetes (k3s/k8s)",
"Containers (Docker/OCI)", "Containers (Docker/OCI)",
"GitOps (Flux)", "GitOps (Flux)",
"CI/CD (Jenkins)", "CI/CD (Jenkins)",
@ -127,10 +133,15 @@ const timeline = [
company: "Titan Lab (personal platform)", company: "Titan Lab (personal platform)",
dates: "Apr 2020 Present", dates: "Apr 2020 Present",
points: [ points: [
"Operate a mixed arm64/amd64 environment with GitOps (Gitea → Jenkins → Harbor → Flux).", "Operate a mixed arm64/amd64 environment with GitOps (Gitea -> Jenkins -> Harbor -> Flux).",
"Centralize identity with Keycloak and front services via Traefik ingress.", "Centralized identity with Keycloak and front services via Traefik ingress.",
"Run tiered Longhorn storage: astreae (system) and asteria (user).", "Run tiered Longhorn storage: astreae (system) and asteria (user).",
"Build observability with Grafana + VictoriaMetrics and dashboards around real service health.", "Build observability with Grafana + VictoriaMetrics and OpenSearch dashboards around real service health and log tracking.",
"Audio, video, and text communication on a Matrix-LiveKit-Coturn-Element stack with mobile compatibility and AI chat integration.",
"Video streaming of home movies via Jellyfin and instant uploading/publishing with Pegasus.",
"Host crypto projects with a XRM node and a SUI validator.",
"Has a knowledge base about the cluster itself for AI bot awareness.",
"Vault based secret management - no critical information in Kubernetes secrets.",
], ],
}, },
{ {

View File

@ -5,7 +5,7 @@
<p class="eyebrow">Titan Lab</p> <p class="eyebrow">Titan Lab</p>
<h1>Overview</h1> <h1>Overview</h1>
<p class="lede"> <p class="lede">
Titan Lab is a 25-node homelab with a production mindset. Atlas is its Kubernetes cluster that runs user and dev Titan Lab is a 26-node homelab with a production mindset. Atlas is its Kubernetes cluster that runs user and dev
services. Oceanus is a dedicated SUI validator host. Underlying components such as Theia, the bastion, and Tethys, the link between services. Oceanus is a dedicated SUI validator host. Underlying components such as Theia, the bastion, and Tethys, the link between
Atlas and Oceanus underpin the lab. Membership grants the following services below. Atlas and Oceanus underpin the lab. Membership grants the following services below.
</p> </p>
@ -100,14 +100,14 @@ const oceanusPillClass = computed(() => (props.labStatus?.oceanus?.up ? "pill-ok
const metricItems = computed(() => { const metricItems = computed(() => {
const items = [ const items = [
{ label: "Lab nodes", value: "25", note: "26 total (titan-16 is down)\nWorkers: 8 rpi5s, 8 rpi4s, 2 jetsons,\n\t\t\t\t 1 minipc\nControl plane: 3 rpi5\nDedicated Hosts: oceanus, titan-db,\n\t\t\t\t\t\t\t\t tethys, theia" }, { label: "Lab nodes", value: "26", note: "Workers: 8 rpi5s, 8 rpi4s, 2 jetsons,\n\t\t\t\t 1 minipc\nControl plane: 3 rpi5\nDedicated Hosts: oceanus, titan-db,\n\t\t\t\t\t\t\t\t tethys, theia" },
{ label: "CPU cores", value: "142", note: "32 arm64 cores @ 1.5Ghz\n12 arm64 cores @ 1.9Ghz\n52 arm64 cores @ 2.4Ghz\n10 amd64 cores @ 5.00Ghz\n12 amd64 cores @ 4.67Ghz\n24 amd64 cores @ 4.04Ghz" }, { label: "CPU cores", value: "142", note: "32 arm64 cores @ 1.5Ghz\n12 arm64 cores @ 1.9Ghz\n52 arm64 cores @ 2.4Ghz\n10 amd64 cores @ 5.00Ghz\n12 amd64 cores @ 4.67Ghz\n24 amd64 cores @ 4.04Ghz" },
{ {
label: "Memory", label: "Memory",
value: "552 GB", value: "552 GB",
note: "64GB Raspberry Pi 4\n104GB Raspberry Pi 5\n32GB NVIDIA Jetson Xavier\n352GB AMD64 Chipsets", note: "64GB Raspberry Pi 4\n104GB Raspberry Pi 5\n32GB NVIDIA Jetson Xavier\n352GB AMD64 Chipsets",
}, },
{ label: "Atlas storage", value: "80 TB", note: "astreae: 32GB/4xRPI4\nasteria: 48GB/4xRPI4" }, { label: "Storage", value: "80 TB", note: "astreae: 32GB/4xRPI4\nasteria: 48GB/4xRPI4" },
]; ];
return items.map((item) => ({ return items.map((item) => ({
...item, ...item,