5dea6121a3e9de00af91e61c1732a0b5fd0e3ff7
Pure copy edit. Page now publishes the reasoning behind decisions, not the operational specifics (IPs, subnets, ports, hardware fingerprints, build pipeline mechanics). Reasoning preserved in every ADR. - VLAN table: drop Subnet column; replace numeric VLAN IDs with tier names - ISP gateway ADR: drop carrier and gateway model - Caddy ADR: tighten DNS-01 framing to internal-services exposure; SSL → TLS - WireGuard ADR: drop port, VPN subnet, throughput numbers, tier enumeration - Pi-hole ADR: drop host IP and VLAN ID; sharpen trade-off - N100 ADR: drop core/clock and precise throughput; rename to "Mini-PC" - Postgres+Redis ADR: drop apps LXC IP - Gitea CI/CD ADR: drop runner version, build image, host IPs, deploy mechanics - Authentik ADR: unchanged
Tyler Koenig portfolio
Personal portfolio site. Live at lerkolabs.com — self-hosted.
Source: gitea.lerkolabs.com/lerko/portfolio
Stack: Next.js 16 · React 19 · TypeScript · Tailwind v4
Branches
dev— source code; pushing here updates lerkolabs.commaster— reserved for future GitHub mirror; don't touch manually
Commands
npm run dev # dev server at localhost:3000
npm run build # static export into out/
Deploy
git checkout dev && git merge <branch> && git push gitea dev
Push to dev triggers Gitea Actions (.gitea/workflows/deploy.yml):
- Builds the static site (
npm run build) - rsyncs
out/to the portfolio LXC - Rebuilds and restarts the Docker container serving lerkolabs.com
Project layout
src/
app/
layout.tsx # root layout, fonts, ThemeProvider
page.tsx # home: hero, skills, project cards
homelab/page.tsx # homelab page: VLANs, services, ADRs
archive/page.tsx # older projects grid
globals.css # full design system (Tailwind v4 CSS-first, all tokens here)
components/ # Nav, Footer, Hero, ThemeScript, etc.
context/
ThemeContext.tsx # dark mode provider + useTheme hook
data/
projects.ts # all projects, featured + archive split
services.ts # homelab services with categories
public/ # static assets copied into out/ on build
Tailwind v4 is CSS-first — no
tailwind.config.ts. All custom tokens live inglobals.cssunder@theme {}.
Description
Languages
TypeScript
93.5%
CSS
5.3%
JavaScript
1.1%
Dockerfile
0.1%