Projects

Open-source tools, research platforms, and games

Flagship Work

Seven actively developed open-source projects

DEV TOOLS

Chroxy

Control your AI coding agents from anywhere — monitor sessions, approve permissions, and orchestrate Claude Code, Gemini, and Codex remotely.

Chroxy mobile chat view rendering a live coding-agent session with a to-do list

Captured against Chroxy’s Maestro mock-fixture rig (hence the “Mock Session” chip), not a live daemon.

Node.js WebSocket React Vite React Native Tauri Cloudflare Tunnel TweetNaCl

Chroxy is a self-hosted daemon that bridges remote clients to local AI coding CLIs over a secure Cloudflare tunnel. It gives every session a synchronized chat UI and full terminal view, with pluggable providers for Claude Code, Gemini, and Codex behind one WebSocket protocol. Mobile, desktop tray, and web dashboard clients all speak the same end-to-end encrypted contract.

Pluggable Providers: Claude SDK/CLI/TUI, Gemini, Codex, and Docker variants behind one contract
End-to-End Encryption: X25519 and XSalsa20-Poly1305 over an untrusted tunnel with forward secrecy
Two Views One Session: markdown chat UI and xterm.js terminal on the same connection
Container Isolation: sandbox, Docker, and git-worktree session isolation with resource limits
Resilient by Design: supervisor auto-restart, auto-reconnect state machine, and push notifications
Multi-Client: React Native mobile, Tauri desktop tray, and bundled web dashboard
MACOS

DockKeeper

Free, open-source macOS utility that keeps your Dock on the edge and display you chose

The macOS Dock displaced to the left edge, then snapping back to the bottom edge

Displacement simulated for the demo (defaults write); the sub-two-second snap-back is the real app.

Swift AppKit CoreDock API Homebrew

macOS loves to relocate the Dock after sleep or display changes. DockKeeper watches for those events and puts it back on the edge and display you chose — live, with no Dock restart and no flicker. Signed, notarized, and in public beta.

Live repositioning: moves the Dock through the CoreDock API — no killall Dock flicker
Event-driven: reacts to sleep, wake, and display changes instead of running a polling loop
Nothing on trust: no telemetry, no network code — CI fails the build if a networking symbol appears in either binary
No required permissions: one optional feature asks for Accessibility, and only if you turn it on
MCP

Repo Memory

MCP server that gives coding agents persistent repository memory — cut repeated file reads, tokens, and latency.

Terminal capture: repo-memory index and report commands with real numbers
TypeScript Node.js 20+ MCP SDK SQLite better-sqlite3 Vitest ESM

An MCP server that gives AI coding agents persistent, structured memory about a codebase. It caches file summaries and re-reads only files that actually changed via SHA-256 hashing, cutting the tokens agents waste re-reading code they have already seen. Exposes 13 tools spanning summaries, dependency graphs, task memory, and token telemetry.

Token Savings: roughly 3.6x summary-to-file compression, sustained from 10 to 200 files
Stale-Proof Cache: SHA-256 hashing auto-refreshes changed files, never serves stale data
13 MCP Tools: summaries, change detection, dependency graphs, task memory, telemetry
Cross-Turn Memory: task and session persistence survives context-window resets
Multi-Language: regex summarizers for TypeScript, Python, Go, and Rust
Measured Savings: built-in telemetry proves tokens kept out of the context window
DEVOPS

Repo Relay

Discord bot that gives every pull request one live discussion thread — CI, reviews, and releases in context, not notification spam.

A pull request's Discord thread: embed, in-thread CI updates, and merge notice
TypeScript Node.js discord.js better-sqlite3 GitHub Actions SQLite Discord API ES2022

A standalone GitHub-to-Discord integration bot packaged as a composite GitHub Action. It posts one rich embed per pull request with an attached thread, routing pushes, CI status, reviews, and merges into that thread, and also relays issues, releases, deployments, and security alerts to dedicated channels. SQLite state keeps embeds updating across one-shot workflow runs.

Composite GitHub Action: drops into any repository's workflow with no server to host
One-line install: npx blamechris/repo-relay init scaffolds the workflow with an interactive wizard
Threaded PR model: a single embed plus thread holds a PR's entire lifecycle
Piggyback review detection: surfaces Copilot and agent-review despite GITHUB_TOKEN event limits
Persistent state: SQLite WAL store survives self-hosted and cached GitHub-hosted runners
Broad event coverage: 12 GitHub events spanning PRs, CI, issues, releases, deployments, and security alerts
RESEARCH

CareBridge

Research platform for cross-specialty clinical safety — rules engine, explainable AI oversight, synthetic patient scenarios.

CareBridge — research platform for cross-specialty clinical safety
TypeScript Turborepo Fastify + tRPC Next.js 15 Drizzle + PostgreSQL BullMQ + Redis Zod Claude API

CareBridge is a research platform for cross-specialty clinical safety. Every clinical data mutation flows through an event queue where a deterministic rules engine and an LLM review evaluate the patient's full picture — not just the latest chart entry — and surface cross-chart inconsistencies for clinician review. The system is engineered to stay within the FDA non-device CDS boundary with HIPAA-grade PHI encryption and a tamper-evident audit trail. Every patient in the system is synthetic — no real patient data is used.

Event-driven oversight: every chart change is reviewed across specialties asynchronously via BullMQ
Hybrid review: deterministic rules evaluate instantly, an LLM review handles nuanced cases
Compliance by construction: non-device CDS posture, 7-year append-only audit log, AES-256 PHI encryption
Versioned clinical prompts: golden-eval harness and a formal sign-off process guard prompt changes
FHIR R4 interoperability: URL-form identifier namespace built for Epic/Cerner ingestion
TypeScript monorepo: Turborepo and pnpm across shared packages, services, and Next.js portals
MACOS

Aeolus

Free, open-source macOS fan control and thermal monitoring for Apple Silicon and Intel Macs

Aeolus Monitor window showing live fan, temperature, and power readouts

Monitor window — live readouts of real SMC sensor data.

Swift SwiftUI SMC IOKit

Thermal monitoring for Macs with the safety story put first. Monitoring ships today; the fan-control half named in the title is in development, gated behind a safety subsystem — the current helper is read-only and refuses the write path by design.

Live readouts: fans, temperatures, and power from real SMC data in a Monitor window and the menu bar
Safety first: control is in development behind a safety subsystem — nothing writes to hardware yet
Read-only by contract: the helper refuses write operations, enforced by a tripwire test
BROWSER

duskwright

Dark mode for Chrome that never writes to the page — a fork of Dark Reader with a CI-enforced non-destructiveness guarantee.

A rich-text editor fixture page rendered in dark mode by duskwright

Fixture page with duskwright on — the editor’s serialized document model is byte-identical with the extension on or off.

TypeScript Chrome MV3 CSS

A Dark Reader fork built around one guarantee: the extension styles the page without ever mutating the page’s own content. Early development — the element picker and per-scope rules are on the roadmap, not shipped.

Never writes to the page: the purity suite verifies the editor’s serialized document model stays byte-identical
CI-enforced: the purity baseline is zero known violations — a regression fails the build
Honest fork: Dark Reader attribution and license preserved upstream-style

More Projects

Games, apps, and experiments

MOBILE

Archery Apprentice

Production-Grade Cross-Platform Mobile Application

Kotlin Multiplatform Swift Jetpack Compose GitHub Actions JaCoCo CodeCov iOS Android

A comprehensive cross-platform mobile application for tracking archery scores, built with Kotlin Multiplatform for shared business logic and native UI implementations in Swift (iOS) and Jetpack Compose (Android). The project showcases production-grade development practices with extensive CI/CD infrastructure.

95%+ Code Coverage: Comprehensive test suite with JaCoCo integration and CodeCov reporting
Automated CI/CD Pipeline: GitHub Actions workflows for automated testing, building, and deployment
Cross-Platform Architecture: Shared Kotlin Multiplatform code for business logic with native UI layers
iOS Native UI: SwiftUI implementation with seamless KMP integration
Android Native UI: Jetpack Compose for modern, declarative Android interface
Network Syncing: Real-time data synchronization across devices
Production Best Practices: Dependency injection, repository pattern, clean architecture

Technical Highlights: This project demonstrates advanced DevOps capabilities including automated testing workflows, code quality gates, and cross-platform deployment pipelines. The CI/CD infrastructure ensures every commit is validated, tested, and ready for production deployment.

ROGUELIKE

Rah6 — Roll a Hard 6

Balatro-Leaning Co-op Craps with Real-Casino Bet Fidelity

TypeScript React Vite Express WebSockets PostgreSQL Vitest npm Workspaces

A co-op craps game where a deck-builder chip/joker layer sits on top of a fully casino-faithful table. The whole game is built on a pure, deterministic TypeScript reducer over JSON-serializable state — the same property that makes online co-op, save/resume, replay, and deterministic tests one problem solved once.

Pure Deterministic Engine: Seeded-RNG reducer with no I/O, no clocks — JSON round-trips losslessly by contract
The Purist Test: Strip every chip and the table is faithful real-money craps — enforced mechanically by the type system, not convention
Full Casino Bet Catalog: Every bet at real-casino payouts (pass/odds, come, place, buy/lay, props, hops, fire, ATS, repeaters)
Roguelike Layer: Runs, antes, rarity-weighted chip shop, bet leveling, shooter rotation — the Balatro skin on top of the math
Authoritative Online Architecture: Server-run reducer, per-bettor token auth, live lobby join + spectating over HTTP + WS
1000+ Tests: Deep engine coverage of casino payouts, determinism, and the chip contract, plus a real-browser Playwright smoke

Technical Highlights: A strict one-way layered monorepo (pure engine → authoritative server → React client). The chip contract is fenced at all three seams — a compile-time discriminated union plus two runtime guards — so the deck-builder chaos can never break the casino math.

MED TECH

MedLens

Capture medical care, end to end.

React Native Expo TypeScript SQLite ML Kit OCR Expo Router Victory Native Jest

A local-first medical tracking app for patients and family caregivers. Photograph hospital artifacts like IV bags, lab printouts, and vitals monitors, then on-device OCR turns them into a structured, editable timeline that trends over weeks of treatment. Everything stays on the device, and clinical interpretation is firewalled out by design.

Local-First Privacy: all records in on-device SQLite with no server holding medical data
Tiered OCR Pipeline: on-device extraction by default, opt-in cloud tiers for higher accuracy
Context-Aware Trends: coloring keyed to each metric's medically good direction, not just up or down
SaMD Firewall: capture-only patient app deliberately separated from clinician-side interpretation
Lock-Screen PII Rules: notification bodies stripped of patient identifiers by default, pinned by tests
Feature-complete: five design phases complete across capture, timeline, and trends
FAMILY

Letters to Loved Ones

Staying close to the people you love, in life and after loss

React Native Expo TypeScript Supabase Postgres SQLCipher Zustand NativeWind

A family app organized around four tracks for daily reflection, shared one-to-one and group prompts, and a grief-sensitive memorial experience. It is offline-first, private by default, and built so its mechanics soften automatically after a loss rather than punishing absence. The most delicate system, a server-enforced death-transition flow with an immutable audit log, protects users against premature or malicious memorialization.

Four-track model: Personal, Pairings, Family Spaces, and decaying Memorial Candles
Grief-sensitive design: streaks soften on loss, candles decay, absence is never punished
Death-transition state machine: dual-path memorialization with cooldown, objection, and audit log
Offline-first architecture: SQLCipher-encrypted local cache with last-write-wins sync
Privacy by construction: row-level security, client-side encryption, signed-URL media, no ad model
Purpose-built economics: bereavement freeze and a one-time Perpetual Memorial endowment
NAVAL

Sovereign Storm

Turn-based naval combat where every captain plans in secret and the sea resolves it all at once.

TypeScript Phaser 3 Colyseus Node.js Vite pnpm WebSocket

A browser-first, multiplayer, turn-based naval blockade game built as a pnpm monorepo. Captains plan moves and cannon fire simultaneously, and a server-authoritative engine resolves each round into a single deterministic replay so no two players ever desync. Ships five distinct modes spanning team PvP, co-op expeditions, a boss fight, and free-for-all.

Server-Authoritative Netcode: one simulation ships a full replay, guaranteeing zero client desync
Five Match Modes: Blockade, Voyage, Hunt, Free-for-All, and the themed Odyssey expedition over one engine
Simultaneous-Turn Combat: secret planning plus deterministic resolution with ship-push, ramming, and shot-size damage
Data-Driven Modes: a strategy registry lets new modes and themed expeditions ship as data, not engine branches
One-Command Hosting: builds, serves, and opens a Cloudflare tunnel for zero-config co-op sessions
MESSAGING

explAIn

Two-person messaging where LLMs help each party say what they mean.

Expo React Native NativeWind Supabase Postgres Vercel AI SDK TypeScript Turborepo

A one-to-one messaging app where every conversation has three voices: you, a private LLM advisor that helps refine your drafts, and a shared persona-driven mediator visible to both parties. Its non-negotiable rule is transparency: every transformation an LLM makes is visible to the people it affects. Personas range from a passthrough Moderator to a veto-capable Judge and a Dungeon Master that authors its own messages.

Transparency contract: every LLM transformation is visible to the parties it affects
Five mediator personas: distinct behaviors, not just prompts, switchable mid-thread
Private advisor vs shared mediator: a load-bearing visibility boundary enforced by RLS and edge gates
Cross-platform: one Expo codebase for iOS, Android, and web
Provider-agnostic LLM layer: pluggable model providers, framework-free for a future bring-your-own-key variant
Active/observer roles: structured-conversation asymmetry made a first-class primitive

Earlier Work

Research, internships, and firsts (2020–2023)

ENTERPRISE

AULMA

API usage logging & monitoring with Kafka, BigQuery, and Spring Cloud Stream

Apache Kafka Google BigQuery Java

Enterprise system for monitoring partner API usage — asynchronous event streaming into analytics-ready storage across Spring Cloud Stream microservices.

RESEARCH

NSF — HPC Thermal Modeling

NSF-funded ML research: XGBoost thermal prediction for HPC clusters (0.118 RMSE, 0.999 R²)

XGBoost Machine Learning Bash

Undergraduate research at CSU Northridge — an automated benchmarking pipeline across HPE BladeSystem infrastructure feeding a highly accurate temperature-prediction model.

NASA

IRP — Integrated Report Processor

NASA JPL internship tool — Europa Clipper testbed reports cut by 70%

Python Pandas

Report processor used by instrument engineers on the Europa Clipper testing platform; specification-based parsing reduced 600,000-line reports by over 70%.

GAME JAM

Dodging Game

First Java project — a 6-hour game-jam dodger

Java JavaFX

Built during a 6-hour game-jam workshop in 2020: collision detection, random spawns, and player controls — a first encounter with Java and JavaFX.

More on GitHub

The full set of repositories, experiments, and archives lives on GitHub.

Visit GitHub Profile

Interactive Demos

Fun experiments and technical showcases

Animation Showcase

Explore creative CSS animations and effects

View Demo →

Snake Game

Classic snake game implementation

Play Now →