I build practical desktop applications, local APIs, and automation tools. My main project work is in C#/.NET, Python, and TypeScript (React and Angular); my open-source work also spans Go, Java, Kotlin, and Rust.
- Roblox Animator Desktop — Tauri 2, Rust, React, TypeScript; an MIT-licensed local animation editor with a Roblox Studio plugin, samples, and Windows installers.
- Video Pipeline — Python, FastAPI, OpenCV, NumPy; an MIT-licensed local API that transfers visible motion from a guide video onto a still image, persists job history, and reports jobs interrupted by a restart.
- Subtitle Editor — Python, FastAPI, Electron, React, Vite; an MIT-licensed desktop workflow for transcribing, editing, and exporting bilingual vertical videos.
- Pipeline Workflows — Python, Docker, n8n, SQLite; an MIT-licensed self-hosted content workflow with a local approval dashboard.
- FileToMarkdown — C#, ASP.NET Core, Python, SQLite; an MIT-licensed local app with a responsive document workspace for converting files, searching a private library, and reviewing cited answers.
- Angular REST Product Catalog — Angular 22, TypeScript, Vitest, JSON Server; an MIT-licensed local CRUD app with a documented API setup, a real UI screenshot, and six HTTP service tests.
-
cocoa-beans #410 — adjusted the CI gate so tests and coverage run without Sonar credentials, while analysis runs when a token is available. Merged.
-
homelab-monitor #343 — compressed dashboard and API responses while preserving uncompressed server-sent events, with regression tests. Merged.
-
PsychoPy #7822 — updated the sound demo to use the current backend API and removed obsolete attributes. Merged.
-
groq-pr-reviewer-net #8 — added
--langsupport for six review languages with localized headings and fallback tests. Merged. -
ledger-core #32 — added architecture tests enforcing Domain and Application dependency boundaries. Merged.
-
semantic-policy #115 — reject empty input paths with focused CLI errors and regression tests. Merged.
-
cocoa-beans #408 — added
OptionalFloat.ifPresentOrElsewith callback-behavior tests. Merged. -
Cartograph #25 and #49 — documented public API and remaining public types, and clarified behavior descriptions; Java 17 tests and zero-warning Javadoc checks passed. Both merged.
-
uniOS #25 — added visible status feedback before the network settings app starts DHCP renewal. Merged.
-
CodePrism #68 — rejected option-like Git diff ranges and added CLI regression tests. Merged.
-
CodePrism #71 — reject unknown
--languagesvalues instead of silently indexing with a broader language set; added regression coverage. Merged. -
LOKI #11 — discard a failed user turn when every provider attempt fails, with a regression test. Merged.
-
drawpyo #141 — added configurable group factories to
TreeDiagram, including a default and custom-factory tests. Merged. -
compose-hardware-insets #27 — added tested Kotlin/Compose alignments for horizontal screen edges. Merged.
- osk-backend #355 — added unit tests for the partner controller. Approved; merge pending.
- go-collections #269 — wrote a usage guide for Go preprocessing tools and linked it from the package indexes. Local package tests pass; CI is waiting for maintainer approval of the workflow run, and review is pending.
I value focused changes, tests that capture the behavior, and clear notes about what has and has not been verified.
