CHRIS MARTINEZ · HOMELAB
WELCOME
The room is dark. Power it on to look around.
Hi, I'm Chris. I love playing with tech, and these days that means running two self-hosted Linux servers at home and looking for IT work.
START
What I've built
Two laptops running these services around the clock: a gaming laptop for the heavy AI work and an old Dell as a home server. Every service restarts itself after a reboot.
- Local chat modelRUNNING
Gemma 4 12B on the GPU, about 49 tokens per second.
- AI memoryRUNNING
Honcho on PostgreSQL, with a filter I wrote that drops facts credited to the wrong speaker.
- Home serverRUNNING
A 2016 Dell I wiped and rebuilt on Ubuntu Server, with NVIDIA drivers, CUDA and its own heat guard.
- Private chat serverRUNNING
Matrix on the home server, with a pixel-themed web app on my phone. My AI assistant lives there, reachable only over Tailscale.
- Thermal guardRUNNING
Pauses heavy jobs at 85 °C junction temperature and resumes them below 75 °C.
- Art pipelineON DEMAND
ComfyUI with SDXL, pose control and a pixel-art LoRA, for game sprites.
LOAD SAVE
Problems I've solved
Seven real incidents, oldest first. Open a slot to see how each one went.
SLOT 1Laptop kept shutting itself offJUL 2026
- SYMPTOM
- Hard power-offs on three separate days. The kernel log showed the GPU tripping its over-temperature cutoff.
- CAUSE
- Three AI models kept the GPU busy around the clock while the power profile was pinned to performance.
- FIX
- Balanced power profile, a timer that unloads idle models, and a guard that pauses services at 85 °C.
- VERIFIED
- Caught a live spike at 94 °C and recovered. Zero over-temperature events in six weeks of logs.
SLOT 2AI memory recorded my assistant's words as mineSEP 2026
- SYMPTOM
- Stored facts about me that I never said, and per-message recall that never fired.
- CAUSE
- The small model writing memories mixed up speakers, and a hook was reading the wrong field name.
- FIX
- A filtering proxy that checks each fact against both speakers' sentences, plus the hook fix.
- VERIFIED
- 76 facts kept, 53 rejected, every decision logged for audit.
SLOT 3Image pipeline froze the whole systemSEP 2026
- SYMPTOM
- The second image in every batch hung. RAM sat at 28 of 30 GB with over 20 GB in swap.
- CAUSE
- Each image went in as its own job, and the 7 GB model reloaded every time without freeing the old copy.
- FIX
- Rewrote the batch script to send every image as one job, so models load once.
- VERIFIED
- Six images in one run with RAM stable.
SLOT 4Two models fighting over 12 GB of VRAMOCT 2026
- SYMPTOM
- VRAM at 12.8 of 12.9 GB and the chat model crawling at 2 tokens per second.
- CAUSE
- A helper that pauses one model during image jobs restarted it afterward, even when I had shut it off on purpose.
- FIX
- It now restores only the services it paused itself.
- VERIFIED
- Image job ran, the chat model paused and came back on its own, no overlap.
SLOT 5Chat model fell back to the CPU after a kernel upgradeOCT 2026
- SYMPTOM
- 7 tokens per second instead of about 45, with almost nothing loaded on the GPU.
- CAUSE
- A boot race. On the new kernel the GPU finishes initializing a few seconds after the model starts.
- FIX
- A pre-start check that waits until the GPU is visible before the model loads.
- VERIFIED
- Three clean reboots, 49 to 54 tokens per second.
SLOT 6New server stuck at 800 MHzOCT 2026
- SYMPTOM
- Builds crawled on the freshly installed server. The CPU never left its 800 MHz floor and the battery said "not charging".
- CAUSE
- A low-wattage charger. The laptop's firmware saw too little power and throttled the CPU to its minimum.
- FIX
- Swapped in the correct 130 W charger. While benchmarking, I also tested two GPU backends and kept CUDA, which read prompts almost 5x faster.
- VERIFIED
- CPU back up to about 2.9 GHz under load.
SLOT 7My AI assistant forgot me after a moveOCT 2026
- SYMPTOM
- After moving my assistant to the new chat server, it guessed at facts it used to know, like my own GPU.
- CAUSE
- Its memory was filed under my old chat app's user ID. On the new server I showed up as a new user with no history.
- FIX
- Mapped my new ID to the old one, so both open the same memory.
- VERIFIED
- A new message saved under the right identity, and recall returned its old memories.
OPTIONS
My setup
MACHINE 1 · AI WORKSTATION
- System
- ASUS ROG Strix G15 laptop
- CPU
- Ryzen 9 5900HX, 8 cores
- GPU
- Radeon RX 6800M, 12 GB
- Memory
- 32 GB
- OS
- Nobara Linux (Fedora 44)
- Network
- Tailscale private network
- Power profile
- Balanced
MACHINE 2 · HOME SERVER
- System
- Dell Inspiron 15 7559 (2016)
- GPU
- GeForce GTX 960M, 4 GB
- OS
- Ubuntu Server LTS
- Runs
- Matrix chat server, a small AI model
- Mode
- Lid closed, headless, 24/7
SKILLS
- Linux
- systemd
- journalctl
- Troubleshooting
- Networking
- Tailscale
- Ubuntu Server
- NVIDIA / CUDA
- PostgreSQL
- Podman
- Self-hosted AI
- Godot
EXTRAS
The One-Armed Champion
A 2D action RPG I'm building in Godot. It's where I practice procedural generation, art pipelines and automated testing.
- Godot 4
- 20,919 placed objects
- 32 m streaming chunks
- 15 automated tests




CREDITS
How this was made
Designed, run and verified by Chris Martinez. AI coding agents did much of the typing. Every fix listed here was checked on the real machine.
Type: Press Start 2P and IBM Plex Mono.
Last updated October 2026.