Projects
Public work of my own, grouped by the problem it solves. The common thread is getting old systems and new tooling to talk to each other.
Showcase
luckfox-ui
Source release pending.
A config-driven touchscreen dashboard for the Luckfox Pico (Rockchip RV1103, ARM Cortex-A7), written in pure Go with CGO disabled and no module dependencies beyond the standard library. It talks to the Linux framebuffer and evdev touchscreen directly through raw ioctls, polls a JSON API, and renders typed widgets onto pages you can define in a config file.
The interesting part is not the dashboard, it is the ABI detail underneath it.
Scanline stride comes from FBIOGET_FSCREENINFO rather than being computed from
width, because the kernel pads scanlines and on many panels the real stride is
wider. The input_event struct is 16 bytes on ARM32, not the 24 you get on
x86-64, and a compile-time assertion fails the build if that ever drifts. Touch
events accumulate across ABS_X, ABS_Y and BTN_TOUCH and flush once per
SYN_REPORT.
These are the traps that only show up on the target hardware, which is exactly why they are worth writing down.
Legacy meets AI
mcp-accessdb-go
MCP server in Go providing AI assistant access to legacy Access97 databases. Bridges 30-year-old data infrastructure with modern LLM tooling.
mcp-server-access-mdb-with-access97
Python MCP server supporting both modern Access/SQLite and legacy Access97 formats.
Hardware
NZ_Proto_PMod
KiCad hardware design for a protocol personality module — schematic, PCB layout, and separate master and slave boards. Adapts a fuel console to New Zealand pump protocols without changing the console itself.
esphome-custom-adc
Custom ADC component for ESPHome, written in C++.
Arduino-Custom-Streams
Enhanced version of the Arduino Streams class.
Tools
Linux_bin_utils
Shell utilities I use across my own machines.