Private setup for GitHub Actions runners
GHA is my private setup for running GitHub Actions runners for multiple repositories on one VDS. It handles runner registration, a shared job queue and resource limits, letting me run CI jobs on my own server while keeping the workflows in GitHub.

Images
About Private setup for GitHub Actions runners
The motivation was a GitHub Actions bill. Very inspiring stuff.
I use Actions heavily for builds, tests and other checks across my projects. Those jobs add up, and running them on my own VDS made more sense for my workload. Then came the slightly less exciting part: managing all those runners without letting several repositories overwhelm the same machine.
For personal repositories, each repo gets its own runner registration and service. They share a global queue, so jobs run one at a time. Several repositories can have work waiting, but they have to take turns using the server. There’s also an organisation mode where one runner can serve repositories within the same GitHub organisation.
CI runs under a dedicated user with rootless Docker and CPU and memory limits. My production applications keep using their existing Docker setup. That separation matters when the machine doing your builds also has actual websites to run.
The rest is mostly making the routine work less annoying. There are scripts for adding runners individually or in bulk, checking their status, reading logs, inspecting the queue and removing runners when they’re no longer needed. There are also helpers for cleaning up CI Docker data and manually unlocking the queue if an interrupted job leaves it stuck.
It’s all Bash, built around the way I use my own server. A useful little infrastructure project that started because I wanted to keep running my checks without repeatedly checking how much the checks were costing me.
Release history
More software

Treasury Desk
A browser-local crypto treasury demo with payment proposals, two-of-three approvals, revision history, simulated execution and a ledger that records the result.

Take Two
A browser-local video review demo with timestamped feedback, visual annotations, version comparison and approval tied to a specific cut.

Interactive web application concept
Back To Me
A women’s wellness app concept with flexible daily plans, guided programmes, habits, meal planning and journaling.

IndexLane Safe WebP & AVIF Queue
A WordPress plugin that creates WebP and AVIF copies while keeping your original images. Convert in your browser or run background WebP jobs on your hosting, review the savings, and choose when visitors receive the converted images.

Interactive frontend demos
Five Website & Dashboard Templates
Two dashboards, a course website, a wellness membership and a studio website. Explore five distinct designs with working interactions, built with HTML, custom CSS and vanilla JavaScript.

Browser game
Fernwild
A free browser arena shooter starring Fern, an elf with a bow and a limited quiver. Clear four stages, buy upgrades between bosses, and spend earned embers at the Hearth to give the next run a better start.

wp-migrate-core
AI-assisted WordPress migration to Astro, Next.js, Payload and Pruvious. Inspect your export, automate repair triage, review suggestions for alt text, shortcodes and URLs, and carry accepted decisions into a repeatable migration.

ReachLog
Keep business conversations moving with contacts, email history and a pipeline in one self-hosted app. ReachLog can triage replies, draft follow-ups and capture inbound leads using your chosen AI provider.

Gorod Slov
A Russian learning game I built for my girlfriend in one day, with phone audio, offline lessons, saved progress, and a room to decorate.

Three Free Website Templates
A studio portfolio, an editorial publication and a furniture storefront. Preview Meridian, Fieldnote and Ostara, then download the free HTML, CSS and JavaScript source on Contra.

Classifieds & Advertising Platform — Go SSR + React
A live platform with 175k+ ads, rebuilt and expanded over three-plus months with Go-rendered public pages and three React dashboards. The work spans prepared listing data, warmup, payments, search, realtime updates, operations and production migration.

IndexLane Broken Link & Redirect Auditor
A WordPress plugin for finding broken internal links, redirects and old URLs left behind after a migration. It shows you where those links are used and takes you to the place where you can edit them.

SSRWire
A command-line tool for inspecting the HTML your server sends, including content and metadata that arrive in a stream. It records when important elements appear and compares responses for different browser, search-crawler and social-preview user agents.
routeplay
A command-line tool for checking that a page delivers the right content and metadata however you reach it. It compares the HTML your server sends, a fresh browser load and the result of clicking through from another page.

crawlcontract
A command-line tool for catching crawl and indexing problems when a website changes. It checks built files or pages fetched from a live or preview site, and compares scans so you can spot problems before a release.

Runnable in Expo Go on iOS and Android
As-Found — Offline Inspection Reports
An offline iOS and Android app for recording property issues with photos and notes, then sharing a finished inspection report as a PDF.
pgvector-index-manager
A command-line tool for keeping your pgvector indexes in line with a configuration you control. It checks what exists, shows you what needs changing, and can build and replace HNSW indexes when you apply those changes.

hueframe
A tool for turning a photo into a website color theme. Drop in an image, see its colors applied to a page, adjust the result and export it as CSS variables or JSON design tokens.

WordPress Publishing for RailCall
Review and approve WordPress changes through RailCall, then publish or schedule them with an activity log and public-page checks.

TypeScript library / CLI
PicoWebPJS
Convert images to WebP in Node.js or the browser without native bindings or WebAssembly. A TypeScript encoder with zero runtime dependencies.

ChattyChat — a scripted character chat with memory
A playful character chat with authored replies, session memory and an optional peek at the rules behind the conversation. Built with Next.js, React and JavaScript.
routelint
A command-line tool for finding broken links, incorrect redirects and indexing conflicts on a live or preview website. It discovers URLs, checks what your server returns and gives you findings tied to specific pages, with the evidence behind them.

pgvector-filterbench
A command-line tool for checking how pgvector search behaves once you add filters. It measures speed, compares approximate results with exact search, and checks query plans to see whether PostgreSQL is using your HNSW index.

Names Over Time
A searchable history of baby names in the US and England & Wales, with popularity charts, yearly rankings and official source data.
Data-Driven Publishing Platform
A publishing platform for running several websites from structured source data. It handles imports, page generation, scheduled updates and search monitoring through one administration panel. Four domains are live; getting traffic to them remains the unfinished part.

Classifieds & Advertising Platform
The original Laravel classifieds and advertising platform I built and maintained for roughly two years. It handled listings, payments, live chat and administration before the Go and React rebuild replaced it in production.

Internal Campaign Tracker
A private platform for routing campaign traffic, tracking clicks and conversions, and comparing performance across sources, offers, and devices.

dayboard — a simple daily planner
A private daily planner with a ranked task queue, rollover for movable tasks and a separate activity log. Built for my phone as a PWA.

Private Organic Search & LLM Activity Tracker
A private analytics tool for tracking website traffic, organic search performance, and activity from search engines and LLM crawlers. It brings ordinary visitor statistics, crawler requests, Google Search Console and Bing Webmaster Tools into one dashboard.

ILCrawler
ILCrawler is the technical SEO crawler I use for my own websites and client audits. It brings page checks, links, screenshots, performance samples and reporting into one place. It’s also the project that repeatedly convinced me I was only one rewrite away from being happy with it.

crawlreplay
A command-line tool for testing robots.txt changes and new deployments against URLs found in your server logs. It helps you catch newly blocked pages, broken responses and unexpected indexing changes before putting those changes live.
Data-Driven Publishing Platform — Go Rebuild
An unlaunched Go rebuild of my publishing platform, using PostgreSQL for application data and background jobs, React for administration and Astro for public websites. It includes source processing, publishing checks and migration tools for the existing sites.

IndexLane Crawl Fetch Inspector
A WordPress plugin for checking redirects, indexing rules, sitemaps and structured data from your dashboard. Particularly handy when you’re launching a site or moving one.

IndexLane Asset Weight Snapshot
A WordPress plugin for checking the CSS and JavaScript your pages reference, measuring the files it can fetch, and comparing the results over time. Useful when you want to see what a plugin update or site change has added.

IndexLane Site Atlas
A WordPress plugin for figuring out how a site fits together before you start changing things. It looks at the connections between plugins, content and stored data, which is useful when you’re planning a cleanup, rebuild or handover.

Food Cost & Profit Tracker
A private app for tracking food costs, stock and estimated profit across direct sales and food delivery. It connects ingredient purchases, recipes, orders and platform fees, helping a seller understand what each dish costs and how much money is actually left.

Personal project · Private prototype · Private source
Dockyard
A Rust infrastructure prototype for monitoring servers, inspecting container applications, and tracking deployment progress in one dashboard.

Comfy Money - Private Multi-Currency Ledger
Comfy Money is a private money tracker I built for myself and my family. It handles wallets in different currencies, income, expenses, transfers, budgets and debts, with automatically updated exchange rates and a mobile interface that installs as a PWA.

Personal project · In private use · Private source
ThaiGlow
A private AI studio that turns product photos into styled images, short videos, and Thai selling copy, with a simple credit budget.

Seller Saga
A playful selling RPG where you attract buyers, pack orders, recruit helpers, and battle the monsters of online shopping — including Refundzilla.

Playable game in development
Adventures of Dexter & Mars
A playable Godot adventure starring Dexter and Mars. Switch dogs, solve house-and-garden puzzles and keep their mischief under control across two episodes.

Endless Forge-Run
A browser game where your hero fights automatically while you choose weapons and skills, climb tougher floors, and unlock equipment for future runs.

Website / image-processing workflow
PrintableLineArt
An archived colouring-page website with a Python workflow for generating printable PNGs and PDFs, and a Laravel application for importing, organising and publishing them.

Bug Squasher: DOM Defense
I was bored and wanted a break from client projects, so I made a little TypeScript game. Naturally, it ended up being about bugs taking down a server.

Android
Maze Unlocker — Android Maze Game
A touch-controlled Android maze game built with Godot, packaged as an APK and tested on a real device. Draw, pause and resume your path through 50 levels, with image rewards and locally saved progress.

AI Taste App
A private dating experiment that learns your visual preferences from yes/no photo ratings and scores new portraits against that feedback.

DG6 — Multilingual pSEO Publishing
A Laravel publishing application for my programmatic SEO projects. DG6 turns generated content into multilingual websites, with separate domains, themes and publishing schedules, all running from one codebase.

Content pipeline
DG6 Swarm — AI Content & Media Pipeline
A Python pipeline that turns a domain and starting keyword into site copy, articles and visual assets. Specialized GPU workers handle each stage, starting and stopping according to queued work.

Earlier personal project - Private source
RunPod Chat Assistant
A lightweight PHP chat interface for RunPod, with saved conversations, reusable prompts, response timing, and estimated usage costs.

Client website
Multilingual Game Directory
A custom PHP directory built for a client, with multilingual content, responsive listing cards, title search and a small admin interface for managing display order and destination links.

Archived project · Private source
PHP Reporting Mailer
An archived PHP utility for copyright-notice emails, keyword ranking reports, and PNG report generation from stored search data.
