Snapshot: full project state
This commit is contained in:
198
portfolio-site/index-v1.html
Normal file
198
portfolio-site/index-v1.html
Normal file
@@ -0,0 +1,198 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Indiana Holmes — Self-Hosted AI & Homelab Infrastructure</title>
|
||||
<meta name="description" content="I get local AI running on hardware you own — GPU passthrough, multi-host Ollama routing, and self-hosted LLMs that never leave your network.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#0a0e14; --bg2:#0f1520; --panel:#121a26; --line:#1e2a3a;
|
||||
--text:#d7e0ea; --muted:#7f8ea3; --accent:#4ade80; --accent2:#38bdf8;
|
||||
--amber:#fbbf24; --mono:'SFMono-Regular',ui-monospace,'JetBrains Mono',Consolas,monospace;
|
||||
--sans:-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
body{background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.6;
|
||||
-webkit-font-smoothing:antialiased;}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
.wrap{max-width:860px;margin:0 auto;padding:0 24px}
|
||||
.mono{font-family:var(--mono)}
|
||||
.accent{color:var(--accent)}
|
||||
|
||||
/* nav */
|
||||
nav{display:flex;justify-content:space-between;align-items:center;padding:22px 0;border-bottom:1px solid var(--line)}
|
||||
.logo{font-family:var(--mono);font-weight:700;font-size:15px;letter-spacing:.5px}
|
||||
.logo .prompt{color:var(--accent)}
|
||||
.logo .cursor{color:var(--accent);animation:blink 1s step-end infinite}
|
||||
@keyframes blink{50%{opacity:0}}
|
||||
nav .links a{color:var(--muted);margin-left:22px;font-size:14px}
|
||||
nav .links a:hover{color:var(--text)}
|
||||
|
||||
/* hero */
|
||||
.hero{padding:72px 0 48px}
|
||||
.hero .tag{display:inline-block;font-family:var(--mono);font-size:12px;color:var(--accent);
|
||||
border:1px solid var(--line);background:var(--bg2);padding:4px 12px;border-radius:20px;margin-bottom:22px;letter-spacing:.5px}
|
||||
h1{font-size:44px;line-height:1.15;font-weight:800;letter-spacing:-.5px;margin-bottom:20px}
|
||||
h1 .hl{color:var(--accent)}
|
||||
.lede{font-size:19px;color:var(--muted);max-width:640px;margin-bottom:28px}
|
||||
.cta{display:flex;gap:14px;flex-wrap:wrap}
|
||||
.btn{display:inline-block;padding:13px 24px;border-radius:8px;font-weight:600;font-size:15px;border:1px solid transparent}
|
||||
.btn.primary{background:var(--accent);color:#04140a}
|
||||
.btn.primary:hover{background:#5ee89a;text-decoration:none}
|
||||
.btn.ghost{border-color:var(--line);color:var(--text)}
|
||||
.btn.ghost:hover{border-color:var(--accent);text-decoration:none}
|
||||
|
||||
/* stats */
|
||||
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
|
||||
border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:8px 0 64px}
|
||||
.stat{background:var(--panel);padding:22px;text-align:center}
|
||||
.stat .n{font-family:var(--mono);font-size:28px;font-weight:700;color:var(--accent)}
|
||||
.stat .l{font-size:12.5px;color:var(--muted);margin-top:4px}
|
||||
|
||||
/* sections */
|
||||
section{padding:40px 0}
|
||||
.sec-head{font-family:var(--mono);font-size:13px;color:var(--accent2);letter-spacing:1px;
|
||||
text-transform:uppercase;margin-bottom:24px}
|
||||
.sec-head::before{content:"▸ ";color:var(--accent)}
|
||||
|
||||
h2{font-size:28px;font-weight:800;letter-spacing:-.3px;margin-bottom:14px}
|
||||
.sub{color:var(--muted);font-size:16px;margin-bottom:32px;max-width:640px}
|
||||
|
||||
/* projects */
|
||||
.project{background:var(--panel);border:1px solid var(--line);border-radius:12px;
|
||||
padding:30px;margin-bottom:22px}
|
||||
.project h3{font-size:21px;font-weight:700;margin-bottom:6px}
|
||||
.project .meta{font-family:var(--mono);font-size:12px;color:var(--muted);margin-bottom:18px}
|
||||
.project .grid{display:grid;grid-template-columns:1fr;gap:18px}
|
||||
.prow{display:grid;grid-template-columns:120px 1fr;gap:16px}
|
||||
.prow .k{font-family:var(--mono);font-size:13px;color:var(--amber);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
|
||||
.prow .v{font-size:15px;color:var(--text)}
|
||||
.tools{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
|
||||
.tools span{display:inline-block;font-family:var(--mono);font-size:12px;color:var(--accent2);
|
||||
background:var(--bg2);border:1px solid var(--line);border-radius:6px;padding:3px 10px;margin:0 6px 6px 0}
|
||||
|
||||
/* services */
|
||||
.svc{display:grid;grid-template-columns:1fr 1fr;gap:16px}
|
||||
.svc-item{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:24px}
|
||||
.svc-item h4{font-size:16px;font-weight:700;margin-bottom:6px}
|
||||
.svc-item .rate{font-family:var(--mono);color:var(--accent);font-size:15px;font-weight:600}
|
||||
.svc-item p{font-size:14px;color:var(--muted);margin-top:8px}
|
||||
|
||||
/* contact */
|
||||
.contact{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:36px;text-align:center;margin-bottom:40px}
|
||||
.contact h2{margin-bottom:10px}
|
||||
.contact p{color:var(--muted);margin-bottom:22px}
|
||||
.contact .email{font-family:var(--mono);font-size:17px;color:var(--accent)}
|
||||
|
||||
footer{border-top:1px solid var(--line);padding:28px 0 40px;text-align:center;color:var(--muted);font-size:13px}
|
||||
footer a{color:var(--muted)}
|
||||
|
||||
@media(max-width:680px){
|
||||
h1{font-size:32px}
|
||||
.stats{grid-template-columns:repeat(2,1fr)}
|
||||
.prow{grid-template-columns:1fr}
|
||||
.svc{grid-template-columns:1fr}
|
||||
nav .links a{display:none}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="wrap">
|
||||
<nav>
|
||||
<div class="logo"><span class="prompt">~</span> ih<span class="cursor">▊</span></div>
|
||||
<div class="links">
|
||||
<a href="#work">work</a>
|
||||
<a href="#services">services</a>
|
||||
<a href="#contact">contact</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<header class="hero">
|
||||
<span class="tag">self-hosted AI · homelab · hardware</span>
|
||||
<h1>I get local AI running on<br>hardware <span class="hl">you own</span>.</h1>
|
||||
<p class="lede">GPU passthrough, multi-host Ollama routing, and self-hosted LLMs that never
|
||||
leave your network. If your GPU won't cooperate with Ollama, I can fix it.</p>
|
||||
<div class="cta">
|
||||
<a class="btn primary" href="#contact">Hire me</a>
|
||||
<a class="btn ghost" href="#work">See the work</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="stats">
|
||||
<div class="stat"><div class="n">4</div><div class="l">GPU lanes routed</div></div>
|
||||
<div class="stat"><div class="n">100K</div><div class="l">ctx on 16GB VRAM</div></div>
|
||||
<div class="stat"><div class="n">13.2</div><div class="l">tok/s on a $100 GPU</div></div>
|
||||
<div class="stat"><div class="n">3</div><div class="l">hosts, one model std</div></div>
|
||||
</div>
|
||||
|
||||
<section id="work">
|
||||
<div class="sec-head">01 · Selected work</div>
|
||||
<h2>Proof, not promises.</h2>
|
||||
<p class="sub">Real builds from real hardware. Each one solves the exact problem people
|
||||
pay to have solved.</p>
|
||||
|
||||
<div class="project">
|
||||
<h3>R630 → Always-On Ollama Inference (GPU Passthrough)</h3>
|
||||
<div class="meta">Dell R630 · Quadro M4000 · Vulkan fallback · 13.2 tok/s</div>
|
||||
<div class="prow"><div class="k">Problem</div><div class="v">A retired R630 needed to become a 24/7 local LLM box for a fleet of apps — instead of each app spinning up its own Ollama or renting cloud GPU time.</div></div>
|
||||
<div class="prow"><div class="k">Approach</div><div class="v">Docker + nvidia-toolkit, Ollama as a systemd service (LAN-open, keep_alive, model pinning). Diagnosed the undocumented gotcha: Ollama 0.34 dropped CUDA for Maxwell, so it silently fell back to Vulkan — benchmarked it properly instead of declaring it dead.</div></div>
|
||||
<div class="prow"><div class="k">Result</div><div class="v">ornith-1.5:9b at 100% GPU, 13.2 tok/s on a $100 retired card — the always-on consolidation lane every server app now points at.</div></div>
|
||||
<div class="tools"><span>Proxmox</span><span>Docker</span><span>Ollama</span><span>Vulkan</span><span>ZFS</span><span>systemd</span><span>iDRAC</span></div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<h3>4-Lane Multi-GPU LLM Routing Architecture</h3>
|
||||
<div class="meta">RTX 4080 SUPER · RTX 3070 · M4000 · MacBook · one model standard</div>
|
||||
<div class="prow"><div class="k">Problem</div><div class="v">Three GPUs + a MacBook were being used ad hoc — every app guessed where to send its LLM call, causing GPU saturation, cold-model timeouts, and latency-critical jobs queued behind batch work.</div></div>
|
||||
<div class="prow"><div class="k">Approach</div><div class="v">Four explicit lanes (premium / batch / always-on / voice) with a single model standard and per-lane latency/VRAM routing. Shared one GPU between Ollama and ComfyUI via HyperSwap.</div></div>
|
||||
<div class="prow"><div class="k">Result</div><div class="v">100K-token context on 16GB VRAM with zero CPU offload; prefill pushed 308 → 1867 tok/s. Every consumer mapped to the lane that fits its class.</div></div>
|
||||
<div class="tools"><span>Ollama multi-host</span><span>CUDA</span><span>Vulkan</span><span>Flash Attention</span><span>KV-cache quant</span><span>HyperSwap</span><span>ComfyUI</span></div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<h3>Android TV Box Rooting + Emulation (SK4 Pro)</h3>
|
||||
<div class="meta">UGOOS SK4 Pro · Amlogic · Android 14 · Magisk · NetherSX2</div>
|
||||
<div class="prow"><div class="k">Problem</div><div class="v">Turn an Android TV box into a retro-emulation console (N64/PS1/PS2) — which required root, BIOS/ROM staging, and core config, all below the app layer.</div></div>
|
||||
<div class="prow"><div class="k">Approach</div><div class="v">Pushed Magisk 30.7, patched the A/B boot image, staged PS1/PS2 BIOS + ROMs, configured RetroArch cores, and managed it over ADB + SMB.</div></div>
|
||||
<div class="prow"><div class="k">Result</div><div class="v">A rooted, emulation-ready TV box with clean ROM/BIOS layout, side-loaded Jellyfin, managed fully remote over the LAN.</div></div>
|
||||
<div class="tools"><span>Amlogic A/B</span><span>Magisk</span><span>ADB</span><span>RetroArch</span><span>NetherSX2</span><span>Samba</span><span>ESP32-S3</span></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="services">
|
||||
<div class="sec-head">02 · What I do</div>
|
||||
<h2>Services & rates.</h2>
|
||||
<div class="svc">
|
||||
<div class="svc-item"><h4>Self-hosted AI / GPU passthrough</h4><div class="rate">$75/hr</div><p>Local LLM on your own hardware — GPU passthrough, Ollama setup, multi-host routing, context/VRAM optimization.</p></div>
|
||||
<div class="svc-item"><h4>Homelab & sysadmin</h4><div class="rate">$65/hr</div><p>Proxmox, Docker, ZFS, backups (PBS), networking. Turn a pile of servers into one clean infrastructure.</p></div>
|
||||
<div class="svc-item"><h4>Hardware / embedded</h4><div class="rate">$65/hr</div><p>Android TV rooting, ESP32 firmware, ADB automation, boot-image patching — the below-the-OS-layer stuff.</p></div>
|
||||
<div class="svc-item"><h4>Defensive security review</h4><div class="rate">$95/hr</div><p>Authorized vulnerability assessment and app-security review. Scoped, documented, lawful.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="contact">
|
||||
<div class="sec-head">03 · Contact</div>
|
||||
<div class="contact">
|
||||
<h2>Have a GPU that won't cooperate?</h2>
|
||||
<p>Tell me your hardware and what's stuck. I'll tell you if it's a 2-command fix or a real job.</p>
|
||||
<div class="email">indianaholmes1@icloud.com</div>
|
||||
<div style="margin-top:18px">
|
||||
<a class="btn primary" href="mailto:indianaholmes1@icloud.com?subject=Local%20LLM%20setup">Email me</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>Indiana Holmes · Self-Hosted AI & Homelab Infrastructure</p>
|
||||
<p style="margin-top:8px">
|
||||
<a href="https://buymeacoffee.com/r26xrthzttg" target="_blank" rel="noopener">☕ Support my work</a>
|
||||
· <span class="mono">upwork · reddit · gumroad</span>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user