diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eaf2984 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.xmp diff --git a/Dockerfile b/Dockerfile index 9fe600f..3abf843 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,10 @@ FROM nginx:alpine -COPY index.html /usr/share/nginx/html/index.html -COPY style.css /usr/share/nginx/html/style.css +COPY index.html /usr/share/nginx/html/index.html +COPY style.css /usr/share/nginx/html/style.css +COPY favicon.svg /usr/share/nginx/html/favicon.svg +COPY profile.webp /usr/share/nginx/html/profile.webp +COPY profile.jpg /usr/share/nginx/html/profile.jpg +COPY fonts/ /usr/share/nginx/html/fonts/ EXPOSE 80 diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000..ef20bdf --- /dev/null +++ b/favicon.svg @@ -0,0 +1,4 @@ + + + u + diff --git a/fonts/inter-400.woff2 b/fonts/inter-400.woff2 new file mode 100644 index 0000000..c659f5e Binary files /dev/null and b/fonts/inter-400.woff2 differ diff --git a/fonts/inter-700.woff2 b/fonts/inter-700.woff2 new file mode 100644 index 0000000..8fcc432 Binary files /dev/null and b/fonts/inter-700.woff2 differ diff --git a/fonts/share-tech-mono-400.woff2 b/fonts/share-tech-mono-400.woff2 new file mode 100644 index 0000000..f48075f Binary files /dev/null and b/fonts/share-tech-mono-400.woff2 differ diff --git a/index.html b/index.html index a8ed7b1..d558e7c 100644 --- a/index.html +++ b/index.html @@ -3,13 +3,141 @@ - unbiasedgeek - + Jeff Smith -- unbiasedgeek + + + + + + + + + + + + + + +
-

unbiasedgeek

-

Placeholder. Real content coming soon.

+
+ + + Jeff Smith + +
+

Jeff Smith

+
$ unbiasedgeek
+One who believes a bold, brutal truth is worth
+more than a rose-colored half-truth.
+

Site Reliability Engineer · Pleasant Grove, Utah

+
+
+ +
+
+
+

+ I've been working in IT since 1998, starting out as a system + administrator wrangling Windows NT 3.5 and Linux boxes before + either of them was particularly forgiving. I knew I'd end up + working with computers back in the third grade and never + seriously questioned it. Over the years the work has shifted + from racking servers and keeping them alive to writing the + code and infrastructure that does the keeping-alive for me -- + which is roughly how I ended up as a Site Reliability + Engineer. Off the clock I build self-hosted developer tools + and agentic AI systems, mostly in Go and Python, and run a + homelab built around a fleet of Dell enterprise servers, a + Cisco Nexus 10G switch, and a 10 Gbps symmetric residential + fiber connection -- which I'm slowly bringing under proper + infrastructure-as-code management. +

+

+ When I'm not at a keyboard you'll find me on a trail + somewhere, hunting raids in Pokemon Go (already planning for + GoFest 2026), or losing an evening to anything space-related + -- rockets, telescopes, the slow strange physics of it all. + I'm a lifelong video game collector across retro and modern, + console and PC, with a soft spot for city builders and + systems games like Factorio and Pokopia -- anything with a + satisfying loop and a spreadsheet hiding underneath. + Currently reading Thinking in Systems, and bouncing + between Helldivers 2 missions with my weekly game group and + Pokopia on the Switch 2. +

+
+ +
+

What I'm working on

+
    +
  • + harbormindGo + self-hosted, AI-agnostic chat with tree-based conversation hierarchy +
  • +
  • + luminosPythonClaude API + file system intelligence tool; agentic directory analysis via the Claude API +
  • +
  • + marchwardenPythonMCP + a network of agentic research specialists coordinated by a principal investigator agent +
  • +
  • + homelab-IaCTerraformAnsibleDocker + Terraform + Ansible bringing a fleet of surplus enterprise servers under management +
  • +
+
+
+ + +
+ +
diff --git a/profile.jpg b/profile.jpg new file mode 100644 index 0000000..7d1e8eb Binary files /dev/null and b/profile.jpg differ diff --git a/profile.webp b/profile.webp new file mode 100644 index 0000000..747fd09 Binary files /dev/null and b/profile.webp differ diff --git a/style.css b/style.css index 2433f49..0b53565 100644 --- a/style.css +++ b/style.css @@ -1,8 +1,43 @@ +/* --- Self-hosted fonts --- */ + +@font-face { + font-family: "Inter"; + src: url("/fonts/inter-400.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Inter"; + src: url("/fonts/inter-700.woff2") format("woff2"); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Share Tech Mono"; + src: url("/fonts/share-tech-mono-400.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +/* --- Tokens --- */ + :root { - color-scheme: light dark; - --bg: #0e1116; - --fg: #e6edf3; - --accent: #58a6ff; + color-scheme: dark; + --bg: #0b0f0c; + --bg-elev: #11171374; + --fg: #e6f1e6; + --muted: #8a9b8c; + --accent: #7ee787; + --accent-dim: #4ea355; + --border: #1d251f; + + --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; + --font-mono: "Share Tech Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } * { box-sizing: border-box; } @@ -10,31 +45,243 @@ html, body { margin: 0; padding: 0; - height: 100%; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; - background: var(--bg); + font-family: var(--font-sans); + background: + radial-gradient(ellipse at top, rgba(126, 231, 135, 0.06), transparent 60%), + var(--bg); + background-attachment: fixed; color: var(--fg); -} - -body { - display: grid; - place-items: center; + line-height: 1.6; + -webkit-font-smoothing: antialiased; } main { - text-align: center; - padding: 2rem; - max-width: 40rem; + max-width: 64rem; + margin: 0 auto; + padding: 3.5rem 1.5rem 2.5rem; } +/* --- Two-column body layout (main + sidebar) --- */ + +.layout { + display: grid; + grid-template-columns: 1fr; + gap: 2.5rem; +} + +@media (min-width: 880px) { + .layout { + grid-template-columns: minmax(0, 1fr) 18rem; + gap: 3rem; + align-items: start; + } + + .sidebar { + position: sticky; + top: 2rem; + } +} + +.main-col > section:last-child { margin-bottom: 0; } +.sidebar > section:last-child { margin-bottom: 0; } + +/* --- Header (two-column on desktop, stacked on mobile) --- */ + +header { + display: grid; + grid-template-columns: 1fr; + gap: 1.25rem; + margin-bottom: 2.5rem; + border-bottom: 1px solid var(--border); + padding-bottom: 2rem; +} + +@media (min-width: 640px) { + header { + grid-template-columns: auto 1fr; + gap: 1.75rem; + align-items: center; + } +} + +.avatar { + display: block; + width: 140px; + height: 140px; + border-radius: 50%; + object-fit: cover; + border: 2px solid var(--accent-dim); + box-shadow: 0 0 0 4px rgba(126, 231, 135, 0.08); +} + +.header-text { min-width: 0; } + h1 { - font-size: clamp(2.5rem, 8vw, 5rem); - margin: 0 0 1rem; - color: var(--accent); + font-family: var(--font-mono); + font-size: clamp(1.85rem, 5vw, 2.6rem); + margin: 0; + color: var(--fg); + letter-spacing: -0.02em; + font-weight: 700; } -p { - font-size: 1.125rem; - opacity: 0.85; - margin: 0; +.terminal { + font-family: var(--font-mono); + margin: 0.65rem 0 0; + font-size: 0.9rem; + line-height: 1.55; + color: var(--muted); + white-space: pre-wrap; + max-width: 36rem; +} + +.terminal .prompt { + color: var(--accent-dim); + user-select: none; +} + +.terminal .cmd { + color: var(--accent); + font-weight: 700; + font-size: 1.15rem; +} + +.location { + margin: 0.85rem 0 0; + color: var(--muted); + font-size: 0.85rem; + font-family: var(--font-mono); +} + +/* --- Sections --- */ + +section { + margin-bottom: 2.25rem; +} + +h2 { + font-family: var(--font-mono); + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--accent); + margin: 0 0 0.85rem; + font-weight: 700; +} + +h2::before { + content: "// "; + color: var(--muted); + opacity: 0.6; +} + +p { margin: 0 0 0.75rem; } + +ul { margin: 0; padding: 0 0 0 1.25rem; } + +.bio p + p { margin-top: 0.75rem; } + +/* --- Project list with tech pills --- */ + +.now ul { + list-style: none; + padding: 0; +} + +.now li { + margin-bottom: 0.85rem; + padding-left: 1rem; + border-left: 2px solid var(--border); + transition: border-color 0.15s; +} + +.now li:hover { border-left-color: var(--accent); } + +.now a { + font-family: var(--font-mono); + font-weight: 700; + color: var(--accent); + text-decoration: none; + border-bottom: 1px solid transparent; +} + +.now a:hover { border-bottom-color: var(--accent); } + +.now .desc { + display: block; + color: var(--fg); + opacity: 0.85; + margin-top: 0.15rem; +} + +.tech { + display: inline-flex; + flex-wrap: wrap; + gap: 0.35rem; + margin-left: 0.5rem; + vertical-align: middle; +} + +.tech span { + font-family: var(--font-mono); + font-size: 0.7rem; + padding: 0.1rem 0.5rem; + border: 1px solid var(--accent-dim); + color: var(--accent); + border-radius: 999px; + background: rgba(126, 231, 135, 0.04); +} + +/* --- Interest tags --- */ + +ul.tags { + list-style: none; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} + +ul.tags li { + background: var(--bg-elev); + border: 1px solid var(--border); + color: var(--fg); + padding: 0.2rem 0.65rem; + border-radius: 999px; + font-size: 0.8rem; + font-family: var(--font-mono); +} + +/* --- Links --- */ + +a { + color: var(--accent); + text-decoration: none; + border-bottom: 1px solid transparent; + transition: border-color 0.15s; +} + +a:hover { border-bottom-color: var(--accent); } + +.links ul { + list-style: none; + padding: 0; +} + +.links li { + margin-bottom: 0.4rem; + font-family: var(--font-mono); + font-size: 0.9rem; +} + +/* --- Footer --- */ + +footer { + margin-top: 3rem; + padding-top: 1.5rem; + border-top: 1px solid var(--border); + color: var(--muted); + font-size: 0.8rem; + text-align: center; + font-family: var(--font-mono); }