<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Andrew Khanoff — Blog</title><link>https://andrew.khanoff.com/blog</link><atom:link href="https://andrew.khanoff.com/rss.xml" rel="self" type="application/rss+xml" /><description>Notes on infrastructure, networking and self-hosting.</description><language>en</language><item><title>Before the battery does — watching, and safely steering, a fleet of DC power systems over SNMP</title><link>https://andrew.khanoff.com/blog/dc-power-systems-tracker/</link><guid>https://andrew.khanoff.com/blog/dc-power-systems-tracker/</guid><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><description>A telecom site's quiet promise is that the lights stay on when the grid doesn't. This is the system that keeps watch over a fleet of Eltek DC power plants — discovering them from Zabbix, classifying them against editable per-vendor SNMP profiles, polling every fifteen minutes for metrics and component inventory, and letting operators steer controller parameters over SNMP behind hard guardrails: validate, confirm, set, read back, audit, revert.</description></item><item><title>Knowing what your nginx config actually allows — an auditor that computes effective access</title><link>https://andrew.khanoff.com/blog/nginx-effective-access-policy/</link><guid>https://andrew.khanoff.com/blog/nginx-effective-access-policy/</guid><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><description>nginx-acl-guard parses an nginx config with crossplane, computes the effective access policy for every server/location, and guards edits behind a pipeline that diffs effective access and refuses any unconfirmed widening — git backup, nginx -t on staging, atomic swap, rollback.</description></item><item><title>A self-translating blog: SQLite, a Markdown editor, and a local LLM</title><link>https://andrew.khanoff.com/blog/a-self-translating-blog/</link><guid>https://andrew.khanoff.com/blog/a-self-translating-blog/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>How this blog works under the hood — posts live in SQLite and render Markdown at request time, an admin editor replaces build-time files, and a local Gemma model drafts the Russian and Ukrainian versions for me to review before they go live.</description></item><item><title>RAG for the fuzzy questions, a deterministic CLI for the exact ones</title><link>https://andrew.khanoff.com/blog/asking-questions-of-a-ticketing-system/</link><guid>https://andrew.khanoff.com/blog/asking-questions-of-a-ticketing-system/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>maximo-ticket-tools — a read-only toolkit over an IBM Maximo trouble-ticket system: index it into a local Onyx RAG for natural-language questions, but answer 'how many' with deterministic queries, never the LLM. Plus a PoP-map dashboard and a Telegram watcher.</description></item><item><title>Renting a house with a local LLM as the filter</title><link>https://andrew.khanoff.com/blog/renting-a-house-with-a-local-llm/</link><guid>https://andrew.khanoff.com/blog/renting-a-house-with-a-local-llm/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>home.khanoff.com — a watcher that pulls fresh house-rental listings from two Ukrainian sources, scores each one against fuzzy human criteria with a local LLM, and pings me on Telegram. The model never sits on the ingest path.</description></item><item><title>A resident portal for a homeowners’ association — in plain PHP and SQLite</title><link>https://andrew.khanoff.com/blog/osbb-resident-portal/</link><guid>https://andrew.khanoff.com/blog/osbb-resident-portal/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>osbb-wh.pp.ua — a private web cabinet for the members of an apartment association: announcements, documents, a car registry with licence-plate OCR, polls, tickets to the board and internal mail. No framework, no MySQL — PHP 8.3 and a SQLite file.</description></item><item><title>Leaving WordPress: migrating my site to Astro and SQLite</title><link>https://andrew.khanoff.com/blog/migrating-from-wordpress/</link><guid>https://andrew.khanoff.com/blog/migrating-from-wordpress/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>Why I replaced a 475 MB WordPress install on andrew.khanoff.com with a single Astro container and a SQLite file — and how I did the cutover with zero downtime and a one-command rollback.</description></item><item><title>A daily GitHub → local LLM pipeline that writes my project cards</title><link>https://andrew.khanoff.com/blog/github-gemma-pipeline/</link><guid>https://andrew.khanoff.com/blog/github-gemma-pipeline/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>How the Projects section on this site is filled automatically: a cron job reads my private repos, asks a local Gemma model to draft a blurb, and merges the result into SQLite — without ever overwriting my edits or leaking a private repo.</description></item><item><title>A typo-tolerant family document hub with FastAPI and Meilisearch</title><link>https://andrew.khanoff.com/blog/family-knowledge-hub/</link><guid>https://andrew.khanoff.com/blog/family-knowledge-hub/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>start.khanoff.com — a warm, self-hosted hub for the whole family: documents, how-tos, recipes, links and videos behind one forgiving search box. FastAPI + HTMX + Meilisearch + Immich, magic-link login, PWA.</description></item><item><title>Building a self-hosted CV with Astro, SQLite and a local LLM</title><link>https://andrew.khanoff.com/blog/building-a-self-hosted-cv/</link><guid>https://andrew.khanoff.com/blog/building-a-self-hosted-cv/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>How andrew.khanoff.com is built — server-rendered Astro, a SQLite single source of truth, passkey-only admin, and a daily GitHub→local-LLM pipeline that drafts the project cards.</description></item><item><title>Auto-blocking attackers with BGP — an IDS that announces black-hole routes</title><link>https://andrew.khanoff.com/blog/auto-blocking-attackers-with-bgp/</link><guid>https://andrew.khanoff.com/blog/auto-blocking-attackers-with-bgp/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><description>Suri Defender: detection feeds (CrowdSec + fail2ban) drive an ExaBGP route-injector that announces offending IPs as RTBH routes over iBGP, so attack traffic is dropped at the network borders — not on the server. A 2.7 GB stack rewritten into a few hundred MB.</description></item></channel></rss>