Ulric
Book a call

Eugene, Oregon · one person, whole builds

Insights

Notes from the studio.

Building in public: what I'm making, what broke, and what I'd do differently.

One engine, three client sites: the fork per client model

Three live sites share one CMS engine and share nothing at runtime: separate repositories, separate keys, separate databases, separate hosting accounts. The bill for that isolation arrives every time I fix something in the engine, because a fix lands in one copy and has to be carried to the rest. Here is the ritual, the path a real security fix took, and the four ways the sweep has quietly failed on me.

28,000 listings on one map with MapLibre and no API bill

Every active listing in the state lands on one map, drawn by MapLibre GL JS on ordinary shared hosting, with nothing metering the page loads. One version-stamped GeoJSON off the sync cron feeds the pins, and a self-hosted PMTiles archive is measured and staged to answer for the basemap the free hosted style is drawing today. Measured numbers, the compliance furniture, and the version pin that a release note forced.

Graph RAG vs vector RAG: when the graph earns its keep

Vector retrieval answers the question of what resembles this text, while a graph answers what is connected to it, and the two fail on different questions. The benchmarks say the difference is large on relational questions and close to nothing on lookups, which makes this an accounting decision rather than an architecture debate. What each one costs, the hybrid I actually run, and how to decide before you buy an index.