Projects
A collection of open source packages, tools, and applications I've developed. Some of these are closed source, but I have shared what I can here about them. The majority of projects I have worked on belong to employers or clients and are not listed here.
Tak PHP Core Library
A native PHP core library for Tak, the abstract strategy game. The project focuses on the essential domain model and rules of the game: board state, pieces, legal move validation, stack movement, road detection, and game completion. It is deliberately engine- and interface-agnostic, providing a reliable foundation for consumers such as game servers, analysis tools, command-line applications, and AI engines.
The project is an exercise in careful domain modeling. Tak has a compact ruleset whose interactions produce subtle edge cases, making it well suited to exploring immutable game state, expressive move representations, strict validation, and a clean public API. The goal is not to prescribe how Tak software should be built, but to provide the rules and state transitions that other PHP projects can build upon.
Undisclosed Author Site
🔒 PrivateA private, in-development web application for an independent author. While the public-facing purpose of the site is intentionally undisclosed, the project involves substantially more than a conventional portfolio or publishing website.
Built with Laravel, the application includes a rich domain model, personalized and stateful user experiences, authorization-driven feature visibility, background processing, privacy-conscious identity and account design, and systems that react differently according to a user's prior interactions with the site. The project also involves infrastructure planning, asynchronous services, external payment and cryptocurrency integration, and careful separation between public presentation, private state, and information a user has earned the ability to see.
Much of the engineering challenge comes from supporting complexity without exposing that complexity to the visitor. The application is designed around progressive discovery: simple interactions at the surface are backed by persistent state, contextual behavior, policy decisions, and deliberately constrained information flows. The result is a project that exercises application architecture, database design, security and privacy, asynchronous processing, and long-term maintainability while keeping the visible experience intentionally simple.
Laravel: MySQL Binary UUIDs
A Laravel package for storing UUIDs and ULIDs efficiently as binary values in MySQL while preserving the developer experience of working with their normal string representations. The package provides Eloquent casts, model concerns, and migration grammar support, allowing UUID and ULID columns—including foreign keys—to integrate naturally with Laravel applications.
The package grew from a practical concern: identifiers should have an appropriate database representation without forcing that representation to leak throughout the application. It is designed to make the efficient choice the easy choice, keeping storage details at the database boundary while models, migrations, and application code remain expressive and familiar.
Laravel: Log to Dump
A small Laravel package that adds a dump logging channel,
directing log messages through Laravel's dump() helper. It is
intended for local development and debugging, allowing existing logging calls
to appear directly in tools that consume dump output without changing
application code or replacing structured logging with temporary debugging
statements.
The package is deliberately narrow in scope: configure the channel, send logs to it, and let the surrounding development environment decide how those dumps are presented. It is a small example of extending a framework at the correct boundary—using Laravel's existing logging abstractions rather than asking application code to know where its diagnostic output will ultimately appear.
GitHub]
Packagist]