indifferentketchup GitHub

System admin + support specialist

I keep the servers up.
Usually.

Nearly ten years in IT, two at indifferent broccoli. Python, TypeScript, Go, and a homelab that does considerably too much.

The indifferent ketchup bottle mark: a red ketchup bottle with a flat, unimpressed face on its label.

Work

Public repos, mostly tools I wanted and couldn't find. Most of it runs in my own rack first.

The sortof web app: a dark interface with a workshop ID field on the left and the generated server .ini lines on the right.

sortof

Python + vanilla JS · sortof.indifferentketchup.com

Mod load-order sorter for Project Zomboid dedicated servers. Paste a pile of workshop IDs or a collection URL, get the three lines that go straight into the server .ini, with warnings for mods tagged to a build you aren't running.

The pzlua SandboxVars verifier: a dark editor on the left and a diagnostics panel listing comma and syntax issues on the right.

pzlua

React · TypeScript · Vite · pzlua.indifferentketchup.com

Paste a SandboxVars.lua and catch missing commas, bad operators, out-of-range values, and unbalanced tables before the server refuses to boot.

The Palworld Host Save Fixer: a dark page with a drag-and-drop area for a save folder and buttons to choose a folder, files or a zip.

Palworld host save fixer

Python · palsave.indifferentketchup.com

Fixes the "create a new character" bug when a Palworld save moves between co-op and a dedicated server, by transplanting the player GUID. Drop the save folder in, get a patched one back.

The palserv connect screen: server address, REST port and admin password fields above a Connect button.

palserv

Next.js · React · palserv.indifferentketchup.com

Server administration for any Palworld server, from any browser: monitoring, player roster, live map, and remote operations.

The mulch log analyzer: a dark panel reading paste or drop a log, with paste and browse buttons.

mulch

Next.js · PHP · MongoDB · mulch.indifferentketchup.com

Paste a game-server log, get the problems ranked by severity, attributed to the mod that caused them, with the stack trace attached. Minecraft, Project Zomboid and Hytale.

The 7 Days to Die sandbox code generator: a dark settings panel with tabbed categories and a value field for each game option.

7d2dsandbox

React · TypeScript · Vite · 7d2dsettings.indifferentketchup.com

Sandbox settings for a 7 Days to Die server, without hand-editing XML. Set the 165 options the game exposes, get a SandboxCode to paste into serverconfig.xml or a share link to send someone.

The 7 Days to Die map generator: a dark form with world size, seed and terrain feature controls beside a generate button.

7d2dmapgenerator

FastAPI · React · numpy · 7d2dmapgen.indifferentketchup.com

Builds a 7 Days to Die world without launching the game, same parameters as the Adv. Random Gen screen, handed back as a zip. Terrain, biomes and towns are its own algorithms. The worlds don't load in-game yet: main.ttw stops at the header.

All seven of the above, one page: gametools.indifferentketchup.com

The boo stack

  • boocode

    Four apps in one codebase for working with local and hosted models: chat with tools, agent dispatch, in-browser terminals, and a fleet cockpit for llama-swap hosts, plus an in-app Orchestrator for bounded multi-agent review passes.

    Node · React · Postgres

  • boolab

    One codebase, three branded front doors: boolab itself as the hub and workspace picker, BooOps styled for a more corporate face, and boonotes leaning on upload-scoped sources and RAG. Same chat engine, personas and memory underneath all three.

    FastAPI · React · pgvector

  • boofinity

    Fork of michaelfeil/infinity (MIT) for serving embeddings, rerankers, and multimodal retrieval, including ColPali document-image search. Renamed to the boofinity package, same license.

    Python

  • booskills

    17 skills and 13 personas, plus the model router and Paseo presets that decide which LLM handles each one. Feeds Claude Code, Codex, OpenCode and Paseo from the same source files. No hosted service, no public registry, just a clone and a symlink.

    JavaScript

  • boocontext

    MCP server that answers questions about a codebase: routes, schema, call graphs, health grades, type recovery. AST-based, zero dependencies.

    TypeScript

  • boodrive

    Self-hosted file storage and Git repo hosting, with OnlyOffice built in for in-browser document editing. Disk-usage stats, thumbnails and public sharing on the same backend.

    Go · JavaScript

Everything else on GitHub

Stack

What I actually reach for, roughly in order of how often I reach for it.

Languages

  • Python
  • TypeScript
  • JavaScript
  • Go
  • PHP
  • Bash
  • SQL

Application

  • FastAPI
  • React
  • Next.js
  • Express
  • Vite
  • Node

Data

  • PostgreSQL
  • pgvector
  • PL/pgSQL
  • MongoDB

Infrastructure

  • Linux
  • Windows Server
  • Docker
  • Compose
  • nginx
  • GitHub Actions

Models and retrieval

  • Ollama
  • llama.cpp
  • MCP
  • Embeddings
  • Rerankers
  • BM25 + RRF

Background

Nearly ten years in IT, currently split across two of them. Systems and networks at the day job, support and code at indifferent broccoli.

The day job is the infrastructure side. Servers, switches, DNS, VPN, monitoring, and the unglamorous half of it, which is making sure the thing that fell over at 3am doesn't fall over the same way twice. Mostly it doesn't.

indifferent broccoli is the other one, going on two years. Support first, so other people's game servers are my problem, and then the code that comes out of answering the same question enough times.

That second half is where the GitHub comes from. Almost everything on it started as a gap in a workflow I was already standing in, a log that took too long to read or a search that just didn't exist yet. I build the tool, run it in my own rack until it stops annoying me, then leave it public in case it saves somebody else an afternoon.

I'm also working on a Masters in Social Work. A separate track, running alongside the IT work rather than replacing it. The overlap is smaller than people assume, but it's there: support and social work are both mostly about working out what someone actually needs, which is rarely the thing they opened with.

Day job
System and network admin.
indifferent broccoli
Senior support specialist, support and development, going on two years.
Studying
Masters in Social Work.
At home
A homelab running most of the projects above, which is also how they get tested.
Sam behind a Pioneer DJ setup on a smoke-filled stage lit green and amber.

Off the clock

Music production and gaming

I produce, and I play out. Enough gear has failed on me mid-set that I ended up doing tech support for other producers and DJs at produceit.dev.

Games are survival and sim mostly, which is where a suspicious amount of the tooling above comes from. Stardew Valley, Valheim, Palworld, 7 Days to Die.

Running models locally

Agent orchestration, retrieval, and the ongoing hobby of finding out exactly where the current generation of tooling falls over.

Say hello.

Email is fastest. Happy to talk infrastructure, self-hosting, retrieval, or why your DAW hates your interface.