everything here was built by one person at an unreasonable hour

A private, multi-user job aggregation and ATS-friendly resume platform, built for personal and family use. Aggregates listings into one place, manages resumes in a format that will not get mangled by a parser. Self-hosted with Docker Compose and PostgreSQL; outbound mail routes through Proton Mail Bridge so nothing leaves the house.
STACK: TypeScript, React, Python, PostgreSQL, Docker Compose, Bash
Tracks Royal Caribbean add-on prices — beverage, dining, internet, excursions, spa, the Key — for a sailing you have already booked, charts the history, and tells you when to actually pull the trigger. Written because “watch this price forever” is not a feature any booking site offers.
The second attempt. The first one, RCT, is a scaffold I abandoned two weeks earlier: same scraper, same problem, none of the analysis. This one has a buy-timing predictor, 303 tests, and a Discord bot that will argue with you about when to book.
STACK: Python, FastAPI, React, Recharts, SQLite, Discord bot
A contribution to an existing open-source Electron chat client. Twenty-two commits covering the Avia→Sanctum rebrand end to end, a Gitea-backed auto-updater pointed at my own Forgejo instance, the whole CI workflow moved onto a self-hosted runner, tray icon replacement, and a titlebar text overlap fix that had been open for a while.
Not a project I started. A codebase I was trusted with and made work.
STACK: TypeScript, Electron, Forgejo, Gitea releases
A Packwiz mirror of a working ModrinthApp profile: 172 mods across a
client_pack and server_pack, kept in strict parity
(“mod-for-mod and config-for-config”), so the client and the dedicated
server cannot drift apart. Then tuned every optimization config for one specific
VPS and wrote a ship script for it.
STACK: Python (Packwiz tooling), TOML, shell
A Minecraft modpack built around a single sustained idea, with a 284-file TOML config surface and docs. Most of the work is tuning things nobody will notice until they are missing, which is the entire job.
STACK: TOML (mod configs), JavaScript tooling, shell

Small server-side modifications for the modpack, mostly deployment scripts and config patches. It does about 70% of what it promises and the remaining 30% is the part that is hard, which is why it is still 70%.
STACK: shell, YAML

these are not failures. these are things that taught me what I did not want to build. I keep them listed so I remember not to build them again.
The first Royal Caribbean tracker. Same scraper, same problem, none of the analysis — and its own README said “Phase 0, scaffold.” Two weeks later I threw it away and rewrote it properly. It still had sixty tests, which is the part I cannot defend.
I cloned the same Electron chat app twice, under two directory names, pointing at the same remote, and then developed the rebrand in one of them for four months while the other sat there at an older version. The working copy is on the projects list. This one is a scar.
I have started this four times. The posts exist in drafts. I keep writing documentation instead, which is the same impulse with better odds of being read.
Written, worked, unused within nine days. The people it was for had all stopped asking. I have since written several MCP servers, which is the same mistake at a larger scale.

10 projects listed. 4 shipped, 1 in beta, 1 in progress, 4 abandoned. The maths has never balanced and I have stopped correcting it.
FIND ME ON MY FORGEJO