Portrait of rpgh

$ whoami

Software engineer who likes small, fast, boring-in-a-good-way web apps -- mostly Go on the backend and hypermedia on the wire.

real-time systems · event-driven backends · server-rendered UIs · developer tooling

../ ~/rpgh/projects

$ ls ./projects --filter= all

xsym

$ xsym

A cross-language structural code index, served over MCP. tree-sitter parses Go, Python and Rust into one SQLite index, so the same type spelled three ways collapses to a single lookup -- something grep cannot do, because the names genuinely differ.

RustSQLiteMCPtree-sitterGitCargo
Datastar NATS Tic Tac Toe

$ Datastar NATS Tic Tac Toe

Real-time multiplayer tic tac toe. Game state lives in NATS JetStream; moves stream to every player over SSE with no client-side framework.

GoHTMLCSSNATSNATS JetStreamchiServer-Sent EventsDatastartemplTailwind CSSdaisyUIDockerGitTaskAirDelve
Redis WebSockets Tic Tac Toe

$ Redis WebSockets Tic Tac Toe

The same game a stack earlier: a React front end over raw WebSockets or Socket.IO, picked by one env var, with Redis pub/sub fanning every move out to both tabs and holding the board.

JavaScriptHTMLCSSNode.jsExpressWebSocketsSocket.IORedisReactTailwind CSSDockerGitVite
Vert.x Hazelcast Sensor Cluster

$ Vert.x Hazelcast Sensor Cluster

Three JVM nodes sharing one clustered event bus. Sensors are deployed and torn down from a browser tab onto whichever node you pick; Hazelcast holds the only state, and readings stream to every open tab over SSE.

JavaHTMLCSSVert.xHazelcastServer-Sent EventsDatastarTailwind CSSdaisyUIDockerGitMaven
Claims Portal Crawler

$ Claims Portal Crawler

A .NET crawler that files a month of claims into a JavaScript-heavy payer portal. A Postgres table is the checkpoint, not the filing cabinet: a run that dies to a stale element or an expired session resumes where it stopped.

C#SQLSeleniumEF CorePostgreSQLGit