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.

About Multilingual Game Directory
One of my older client projects: a multilingual game directory for an adult audience, built with PHP, JavaScript and SCSS.
The public side brought the listings into a single interface, with descriptions, feature lists, displayed ratings and links. Visitors could search by title, switch between curated listing orders and open the descriptions on smaller screens. Language-specific routes and a translation dictionary supported the multilingual content.
I also built a small management screen for the parts the client needed to change. Listings could be reordered by dragging them, and their destination links could be updated without editing each card in the page template. The saved settings were stored in JSON-formatted files and read by PHP.
The frontend used custom responsive styles, with Gulp handling SCSS compilation and asset processing. It was a straightforward custom website with a focused set of controls.
The implementation reflects its age. I would organise parts of the templates and content differently today, but it did the job it was built for, and the client's site remains online.
I am keeping it here as a piece of earlier client work. The site belongs to the client; its name and branding are omitted from this portfolio entry.
Release history
More software

wp-migrate-core
A command-line tool for getting a WordPress-to-Astro migration started. It reads a WordPress XML export, inventories content, images and links, and can generate an Astro project with a clear list of what still needs rebuilding.

TypeScript library / CLI
PicoWebPJS
A WebP encoder written in TypeScript for Node.js and browsers. Converts PNGs, baseline JPEGs, BMPs and raw pixels without native bindings or WebAssembly, while preserving transparency and embedded colour profiles.

Classifieds & Advertising Platform — Go Rebuild
An ongoing Go rebuild of my Laravel classifieds platform, with a React dashboard, incremental listing updates and background jobs handled through NATS JetStream. It preserves the existing platform’s behaviour while changing how the application processes and serves its data.

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.


IndexLane Safe WebP Queue
A WordPress plugin that creates WebP copies of your images while keeping the originals. Convert on the server or use the optional browser mode when your host cannot write WebP, with progress reporting and checks before converted files are saved.
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.

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.

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.

ReachLog
ReachLog is a small outreach and contact manager for keeping track of who you’ve contacted, what you’ve discussed and when to follow up. It brings contacts, companies and email conversations together in a local application that works with your existing email account.

IndexLane Redirect & Internal Link 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.

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
A classifieds and advertising platform I’ve been building and maintaining for roughly two years. It combines location-based browsing, advertiser dashboards, paid listings, invoicing, live chat and an administration panel for running the site.

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.

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.
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.
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.

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.

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.

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.

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.