+---
+const identity = [
+ ["role", "soc analyst i · fortress srm"],
+ ["based", "cleveland, oh · est. 2021"],
+ ["stack", "go · react · typescript · linux"],
+ ["infra", "proxmox · pfsense · authentik · nginx"],
+ ["observ", "victoriametrics · grafana · beszel · ntfy"],
+ ["certs", "comptia a+ · network+ (in progress)"],
+];
+
+const contact = [
+ { key: "github", value: "lerko96", href: "https://github.com/lerko96", glyph: "↗" },
+ { key: "gitea", value: "gitea.lerkolabs.com/lerko", href: "https://gitea.lerkolabs.com/lerko", glyph: "↗" },
+ { key: "linkedin", value: "tyler-koenig", href: "https://www.linkedin.com/in/tyler-koenig", glyph: "↗" },
+ { key: "email", value: "tyler@lerkolabs.com", href: "mailto:tyler@lerkolabs.com", glyph: "✉" },
+];
+---
+
+
+
+ identity
+ ~/identity.toml
+
+
+
-
-
- ❯
-
+
tyler koenig
+
+
+ security operations, self-hosted infrastructure, and the software that holds it together.
-
- Security Operations · Self-Hosted Infrastructure
-
+
+
+ {identity.map(([k, v]) => (
+
+ - {k}
+ - {v}
+
+ ))}
+
-
- Homelab runs 30+
- services across segmented VLANs — pfSense, Authentik SSO, full
- observability stack. Write software too: mobile apps, Go backends,
- open protocols. Daily drivers, all of it.{" "}
-
- █
-
-
-
-
+
diff --git a/src/components/HomeServices.astro b/src/components/HomeServices.astro
new file mode 100644
index 00000000..29d71483
--- /dev/null
+++ b/src/components/HomeServices.astro
@@ -0,0 +1,67 @@
+---
+const vlans = [
+ {
+ id: "vlan10",
+ label: "management",
+ services: [
+ { name: "pfsense", kind: "firewall" },
+ { name: "authentik", kind: "sso" },
+ { name: "proxmox", kind: "hypervisor" },
+ { name: "pbs", kind: "backup" },
+ ],
+ },
+ {
+ id: "vlan20",
+ label: "public-facing",
+ services: [
+ { name: "gitea", kind: "scm/ci" },
+ { name: "caddy", kind: "proxy" },
+ { name: "lerkolabs.com", kind: "web" },
+ ],
+ },
+ {
+ id: "vlan30",
+ label: "internal services",
+ services: [
+ { name: "victoriametrics", kind: "tsdb" },
+ { name: "grafana", kind: "dashboards" },
+ { name: "beszel", kind: "host-mon" },
+ { name: "ntfy", kind: "alerts" },
+ { name: "jellyfin", kind: "media" },
+ ],
+ },
+];
+
+const totalSvc = vlans.reduce((n, v) => n + v.services.length, 0);
+---
+
+
+
+ infrastructure
+ {totalSvc} up · 0 failed
+
+
+
+ {vlans.map((vlan, gi) => (
+
+
+ {vlan.id}
+ ·
+ {vlan.label}
+ {vlan.services.length} svc
+
+
+ {vlan.services.map((s) => (
+
+
+ {s.name}
+ {s.kind}
+ up
+
+ ))}
+
+
+
+ ))}
+
+
diff --git a/src/components/Nav.astro b/src/components/Nav.astro
index e4350b4b..f40612cb 100644
--- a/src/components/Nav.astro
+++ b/src/components/Nav.astro
@@ -8,54 +8,66 @@ const links = [
];
---
-
-